基于位置的缓存系统

时间:2013-11-02 19:27:54

标签: php caching

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

2 个答案:

答案 0 :(得分:4)

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

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

<强>挑战:

  1. 时间:缓存将在某个时间点到期。因此,在检查文件是否存在时,还需要检查上次修改的时间戳以确保缓存未过期。如果缓存在一分钟,10分钟,几小时,几天或几个月内到期,则取决于您的应用程序要求。
  2. 在这种情况下制作智能缓存文件名将具有挑战性,即使距离为100米,纬度,长组合也会有所不同。您可以选择一种方法,即通过设置精度来选择文件名。例如,真正的长期组合形式为28.631541,76.945281。您可能想要创建名为28.63154_76.94528.data的缓存文件(将精度值减少到十进制后的5个位置)。这又取决于你是想只为地球上的一个点或一个地理区域缓存,如果是一个地理区域,那么它的半径。
  3. 我不知道为什么有人拒绝投票,我相信这是一个非常好的和聪明的问题。我的upvote:)

答案 1 :(得分:1)

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

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