我喜欢在基于位置的数据高速缓存(在服务器上)系统中为移动应用程序提供数据。即如果某用户从一个位置请求数据(这对所有来自同一区域的用户都是共同的),我会从数据库中获取值并向他们显示。但是,如果第二个用户在同一位置的下一个5分钟内检索同一页面,那么我不想查询数据库中存在的数百万条记录,如果它存在于文件缓存中,我可以将它们带走。那么现在在PHP中可用的这些东西?基于位置的高速缓存系统
回答
我不知道PHP中有这样的事情,但用PHP创建自己的缓存引擎并不难。你需要创建一个缓存目录,并根据你得到的请求来检查你的缓存目录中是否存在与该请求相对应的文件。
例如您的主要参数是lat和long。 假设你得到lat = 123和long = 234(取一些随机值)的请求,你将检查你的缓存文件夹是一个名为123_234.data的文件是否存在。如果存在,则不是查询数据库,而是读取文件并将内容作为输出发送,否则从数据库中读取数据,并在发送响应之前在文件缓存/ 123_234.data中写入该响应。这样您可以稍后再处理文件,而无需再次查询数据库。
挑战:
- 时间:缓存会在某些时候或其他到期。因此,在检查文件是否存在的同时,还需要检查上次修改的时间戳以确保缓存未过期。如果缓存在一分钟,十分钟,几小时,几天或几个月内过期,则这取决于您的应用程序要求。
- 在这种情况下制作智能缓存文件名称将会具有挑战性,因为即使距离为100米,lat,long组合也会有所不同。一种选择可能是通过设置精度来选择文件名。例如真正的经纬度组合是28.631541,76.945281的形式。您可能想要创建一个名为28.63154_76.94528.data的缓存文件(将精度值降至10位后的5个位置)。这又取决于您是否想要缓存地球上或地理区域上的单个点,以及地理区域,然后是其半径。
我不知道为什么有人投下了这个问题,我相信这是一个非常好的和聪明的问题。有我的upvote :)
真的,我很欣赏你的答案,这是有道理的。 – Stranger
如果所有你关心的是查询......一种方法可能是一个数据库表查询结果存储为json或序列化的php对象以及任何你需要匹配位置的字段。
一个cron作业上的任何间隔时间最适合将清除过期的结果
宝贵的答案..但是,当它变得越来越大时,您对性能的看法如何? – Stranger
肯定是一个简单的实施。真的取决于你的后端资源和你想要优化什么 – charlietfl
当我们有更多的用户时,DBs的性能(当它变得巨大时)会再次变得更慢,这使得巨大DB中的检索速度也变慢了吧? – Stranger
- 1. 网络外的高速缓存系统
- 2. 使用Android系统高速缓存
- 3. ASP.NET高速缓存的位置
- 4. MVC中的高速缓存位置
- 5. 选择基于Java的缓存系统
- 6. 高速缓存系统的工作原理网站
- 7. 确定各种文件系统的高速缓存未命中
- 8. 高速缓存中的位掩码
- 9. 计算高速缓存中的位数
- 10. 校验memcache比文件系统高速缓存更快吗?
- 11. 基于文件系统的压缩缓存 - 这是否存在?
- 12. 复制高速缓存中的数据大于一个高速缓存行
- 13. EhCache:高速缓存体系结构
- 14. 学说高速缓存关系
- 15. 关于CPU高速缓存的困惑
- 16. 高速缓存条件不工作基于WordPress的饼干
- 17. 系统中Session,缓存和Cookie的存储位置
- 18. 用于REST API的URL缓存系统的最高效查找
- 19. 使用spring高速缓存的属性高速缓存
- 20. MySQL高速缓存
- 21. 高速缓存调用在MVC中的位置
- 22. 禁用高速缓存中的缓存
- 23. 缓存系统,如分布式缓存,但在这里我需要列出的是在高速缓存中
- 24. 元高速缓存或Codeigniter高速缓存
- 25. 从高速缓存下载图像Android与高速缓存
- 26. 高速缓存的模式
- 27. 基于Java的高速缓存队列具有预定义的生存时间
- 28. 基于位置的服务中的报警系统
- 29. MariaDB基于系统内存的Innodb_buffer_pool_size
- 30. 定义缓存键用于高速缓存在弹簧
运行你的意思是在同一台计算机上,或只是在相同的位置(比如在同一个IP或东西) – putvande
@putvande在服务器上。所以我可以减少负载到DB,因为它有超过一百万条记录.. – Stranger
我不认为你能够做到这一点。 – putvande