有一个数据库记录。此记录有一个网页。此网页已缓存。在某些时候,记录可能会更新,并且不再需要(网页的)缓存。
系统应该立即告诉缓存不再需要它,还是应该在请求缓存网页时(并且仅当)发生这种情况,以防止可能不必要的删除?
这取决于您的具体要求。
在我看来,您有 3 个选择:
- 更改时 - 编辑条目时,还要删除现有的缓存信息(还要确保根据请求重新创建)
- 定期 - 有一个运行一次 X 次的 cron 作业,并重新执行整个缓存
- 基于百分比(不确定如何调用它) - 当请求条目时,执行以下操作:
(基本上下面的代码意味着在 1000 个请求中,请求页面的缓存被清除)
if (rand(1, 1000) == 666) {
/** clear the cache for current requested page */
}
/** handle request */
根据您的流量和缓存的信息量(可能还有其他因素),任何内容都很有用。
当您拥有巨大的缓存时,#3
效果很好,而#2
则非常适合经常更新的较小缓存。
#1
是理想的,但有一个非常大的缺陷 - 有时您可能无法跟踪某些更改。例如,您无法真正判断何时更改模板文件以重新缓存它。
决定您的确切需求,您获得/期望的流量,您将拥有的缓存量,并且有很多工具可以执行这些基准测试(例如Apache基准测试)。
PS:您很可能需要这些的组合
例:
在具有经常更改的巨大缓存的应用程序中,我会 #1
+ #3
,同时根据应用程序收到的流量和基准测试结果选择完美百分比。
而且,为了以积极的态度结束答案,这里有莱昂·班布里克(Leon Bambrick)的一句话
计算机科学中有 2 个难题:缓存失效、命名事物和 off-by-1 错误。