基于位置的缓存系统


Location based caching system

我喜欢有一个基于位置的数据缓存(在服务器上)系统,用于为移动应用程序提供数据。 即,如果某个用户从某个位置请求数据(同一区域的所有用户通用),我将从数据库中获取值并显示给他们。但是,如果第二个用户在接下来的 5 分钟内从同一位置检索同一页面,那么我不想查询数据库中存在的数百万条记录,如果它在文件缓存中,我可以获取它们。那么现在在 PHP 中有什么这样的东西吗?

我不知道 PHP

中有任何这样的事情,但用 PHP 制作自己的缓存引擎并不难。您需要创建一个缓存目录,并根据您获得的请求,您必须检查缓存目录中是否存在与该请求对应的文件。

例如,您的主要参数是纬度和经度。假设您收到 lat = 123 且 long = 234(取一些随机值)的请求,您将检查您的缓存文件夹是否为名为 123_234.data 的文件是否存在。如果存在,则不是查询数据库,而是读取文件并将内容作为输出发送,否则从数据库中读取并在发送响应之前将该响应写入文件缓存/123_234.data。这样,您也可以稍后提供文件,而无需再次查询数据库。

挑战:

    时间
  1. :缓存将在某个时间点过期。因此,在检查文件是否存在时,您还需要检查上次修改的时间戳以确保缓存未过期。如果缓存在一分钟、10 分钟、几小时、几天或几个月后过期,这取决于您的应用程序要求。
  2. 在这种情况下,制作智能缓存文件名将具有挑战性,因为即使对于 100m 的距离,经度、经度组合也会有所不同。一个选项可能是通过设置精度来选择文件名。例如,真正的经度组合的形式为 28.631541,76.945281。您可能需要创建一个名为 28.63154_76.94528.data 的缓存文件(将精度值减少到小数点后 5 位)。这同样取决于您是只想缓存地球上的单个点还是地理区域,如果是地理区域,则取决于它的半径。

我不知道为什么有人投票反对这个问题,我相信这是一个非常好和聪明的问题。我的赞成票:)

如果您关心的只是查询...一种方法可能是将查询结果存储为 JSON 或序列化 PHP 对象的数据库表,以及匹配位置所需的任何字段。

以最适合的间隔运行的 cron 作业将清除过期的结果