让我们假设我们的博客中包含A
类别。类别A
目前在100页上有1000个帖子。所有页面都缓存在文件中(例如,由Smarty模板引擎缓存)。我正在添加帖子并希望它立即显示在第一页上。因此,我必须为A类的所有100页清除或无效缓存。
删除缓存页面不是一个好主意,因为我们可能有太多文件(例如,数千页)。我认为根据请求使缓存失效并重新生成页面效率要高得多。
我唯一的想法是将number of posts in category
添加到缓存ID。所以,首先我们应该获得类别中的帖子数量(例如,来自memcache),然后检查缓存版本是否有效。
一切看起来都很简单。但是让我们想象一下,当我添加新帖子然后1分钟后我将删除另一个(较旧的)帖子。帖子数量仍然是1000,一些类别页面将保持旧状态(如果在这1分钟内没有查看)。
解决方案是什么?
PS:对不起我的英语,但我认为那些已经遇到过这种问题的人会清楚我的问题。
谢谢
答案 0 :(得分:0)
帖子数量不是一个好的解决方案,因为当您编辑某些帖子时,您也希望刷新缓存。
我能想到的一些策略:
添加(删除,修改)新帖子时 - 将当前时间戳存储在某个类别中,我们称之为cache_threshold
。请求页面时 - 检查此页面何时被缓存。如果它早于我们的阈值 - 需要重新生成页面。
您可以缓存每个帖子,而不是缓存整个页面。如果添加(删除,编辑)新帖子,您只需立即重新生成其缓存,因为它不耗时。为了显示页面,您只需要获取所需数量的缓存帖子并显示它们。
此解决方案需要更多工作,但更灵活,更有效。