应该何时缓存失效?

时间:2013-09-09 14:45:52

标签: php caching cache-invalidation

有一个数据库记录。此记录有一个网页。此网页已缓存。在某些时候,记录可能会更新并且不再需要(网页的)缓存。

系统是否应立即告知缓存不再需要缓存,或者是否应该在请求缓存网页时(并且仅当)请求这样做,以防止可能不必要的删除?

1 个答案:

答案 0 :(得分:1)

这取决于您的具体要求。

我看到它的方式,你有3个选择:

  1. on change - 当您的条目被编辑时,也会删除现有的缓存信息(同时确保根据请求重新创建)
  2. 定期 - 让一个运行X次的cron作业,并重新执行整个缓存
  3. 基于百分比(不知道如何调用它) - 请求条目时,请执行以下操作:
  4. (基本下面代码表示1000次请求中的一次,清除所请求页面的缓存)

    if (rand(1, 1000) == 666) {
        /** clear the cache for current requested page */
    }
    /** handle request */
    

    根据您的流量和缓存的信息量(可能还有其他因素),任何内容都非常有用。

    当你有一个巨大的缓存时,

    #3很有用,而#2很适合经常更新的较小缓存。

    #1是理想的,但有一个很大的缺陷 - 有时你可能无法跟踪某些变化。例如,您无法确定何时更改模板文件以重新缓存它。

    由您来决定您的确切需求,您获得/期望的流量,您将拥有的缓存量,还有相当多的工具来执行这些基准测试(例如Apache Benchmark )。

    PS:您很可能需要这些

    的组合

    示例:

    在具有经常更改的巨大缓存的应用程序上,我会#1 + #3,同时根据应用程序收到的流量和基准测试结果选择完美的百分比。

    而且,要以积极的方式结束答案,这里引用的是Leon Bambrick

      

    计算机科学存在两个难题:缓存失效,命名事物和一分之一错误。