1

假设我们有 blog 的 category A。类别A目前在 100 页上有 1000 个帖子。所有页面都缓存在文件中(例如,由 Smarty 模板引擎缓存)。我正在添加帖子并希望它立即显示在第一页上。因此,我必须清除或使所有 100 个 A 类页面的缓存无效。

删除缓存页面不是一个好主意,因为我们可能有太多文件(例如,数千个页面)。我认为使缓存无效并根据请求重新生成页面是更有效的方法。

我唯一的想法是添加number of posts in category到缓存ID。因此,首先我们应该获取类别中的帖子数量(例如,来自 memcache),然后检查缓存版本是否通过该数量有效。

一切看起来都很好而且很简单。但是让我们想象一下我添加新帖子然后在 1 分钟后删除另一个(旧)帖子的情况。帖子数量仍为 1000,并且某些类别页面将保持旧状态(如果在这 1 分钟内未查看它们)。

解决办法是什么?

PS:对不起我的英语,但我认为我的问题对于已经遇到过此类问题的人来说会很清楚。

谢谢

4

1 回答 1

0

帖子数量不是一个好的解决方案,因为当您编辑某些帖子时,您也希望刷新缓存。

我能想到的几个策略:

  • 使用更改时的时间作为参考。

添加(删除、编辑)新帖子时 - 将当前时间戳存储在一个类别中,让我们调用它cache_threshold。请求页面时 - 检查此页面何时被缓存。如果它比我们的阈值旧 - 需要重新生成页面。

  • 切换到对象缓存而不是页面缓存。

您可以缓存每个单独的帖子,而不是缓存整个页面。如果添加(删除、编辑)新帖子,您只需立即重新生成其缓存,因为它不耗时。为了显示页面,您只需要获取所需数量的缓存帖子并显示它们。

这个解决方案需要更多的工作,但它更加灵活和有效。

于 2010-09-15T15:26:26.373 回答