我喜欢有一个基于位置的数据缓存(在服务器上)系统,用于为移动应用程序提供数据。即,如果某些用户从某个位置请求数据(这对来自同一区域的所有用户都是通用的),我将从数据库中获取值并显示给他们。但是,如果第二个用户在接下来的 5 分钟内从同一位置检索同一页面,那么我不想查询数据库中存在的数百万条记录,如果它存在于文件缓存中,我就可以获取它们。那么现在在 PHP 中有什么可用的东西吗?
问问题
88 次
2 回答
2
我不知道 PHP 中有任何这样的事情,但是用 PHP 制作自己的缓存引擎并不难。您需要创建一个缓存目录,并且根据您获得的请求,您必须检查与该请求对应的文件是否存在于您的缓存目录中。
例如,您的主要参数是纬度和经度。假设您收到 lat = 123 和 long =234 的请求(取一些随机值),您将检查您的缓存文件夹是否存在名为 123_234.data 的文件。如果存在,则不是查询数据库,而是读取文件并将内容作为输出发送,否则您从数据库中读取并在发送响应之前将该响应写入文件缓存/123_234.data。这样,您以后也可以提供文件,而无需再次查询数据库。
挑战:
- 时间:缓存将在某个时间点或另一个过期。所以在检查文件是否存在的同时,还需要检查最后修改的时间戳,确保缓存没有过期。如果缓存在一分钟、10 分钟、几小时、几天或几个月后过期,这取决于您的应用程序要求。
- 在这种情况下制作智能缓存文件名将是一项挑战,因为即使距离为 100m,lat、long 组合也会有所不同。您的一种选择可能是通过设置精度来选择文件名。例如,真正的经纬度组合的形式为 28.631541,76.945281。您可能想要创建一个名为 28.63154_76.94528.data 的缓存文件(将精度值减少到小数点后 5 位)。它再次取决于您是否只想缓存地球上的单个点或地理区域,如果是地理区域,那么它的半径。
我不知道为什么有人对这个问题投了反对票,我相信这是一个非常好的和聪明的问题。我赞成:)
于 2013-11-02T19:57:58.880 回答
1
如果您所关心的只是查询......一种方法可能是一个数据库表,它将查询结果存储为 json 或序列化的 php 对象以及您需要匹配位置的任何字段。
以最适合的时间间隔运行的 cron 作业将清除过期的结果
于 2013-11-02T20:13:13.137 回答