我需要一种方法来检测我的数据库的更改,因为我正在客户站点上实现缓存系统。 (缓存整个页面,而不仅仅是查询)
在每一页的顶部(我有一个“母版页”,所以代码中只有一个地方)我查询数据库以查看它的 size is changed like so .
我对大小求和并得到一个“唯一”数字。将其与上一个进行比较,如果值相同,则传递缓存页面,如果不相同,则运行“正常”页面,然后将其缓存。
所以我认为理论上这可行,因为我只有 1 个数据库查询,并基于该查询将网站(缓存或未缓存取决于结果)交付给用户。
这行得通吗?如果行不通,为什么?
编辑:
检查上次更新时间戳怎么样? LINK
最佳答案
谁在更新数据库?建议导致更改的进程应该是使缓存无效的进程。当用户/管理员导致表发生更改时,您可以:
- 如果管理员和面向公众的网站共享同一个应用程序空间(即它们是同一个应用程序),则只需在管理员进行更改时更新缓存即可。
- 在某处设置一个状态位(也许是 session 变量),并定期检查以重新加载您的缓存数据。
建议大小不是“发生变化”的良好指标。忘记行 - 如果 bool/bit 值发生变化怎么办?这将满足使缓存无效的条件,但“大小”将始终相同。您可以使用上次更改日期时间来改进这一点,但您仍然遇到相同的基本问题 - 查询数据库以检查更改标志。有点违背了缓存的目的。
考虑另一种方法 - 每 n 分钟重新加载一次缓存。无论是否有变化,只需重新加载即可。 n 将是适合您的业务需求的值。您可能拥有陈旧的缓存,并在最多 n 分钟内提供旧/陈旧数据。这不是我的建议,而是需要考虑的事情。
关于php - 数据库变化检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148672/