添加新帖子后,缓存的类别页面(第1页,第2页等)无效?

时间:2010-09-14 17:50:26

标签: performance caching smarty cache-invalidation

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

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

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

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

解决方案是什么?

PS:对不起我的英语,但我认为那些已经遇到过这种问题的人会清楚我的问题。

谢谢

1 个答案:

答案 0 :(得分:0)

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

我能想到的一些策略:

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

添加(删除,修改)新帖子时 - 将当前时间戳存储在某个类别中,我们称之为cache_threshold。请求页面时 - 检查此页面何时被缓存。如果它早于我们的阈值 - 需要重新生成页面。

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

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

此解决方案需要更多工作,但更灵活,更有效。