让我们想象我们有类别A
的博客。类别A
目前在100页上有1000个帖子。所有页面都缓存在文件中(例如,由Smarty模板引擎缓存)。我正在添加帖子,并希望它立即显示在第一页上。因此,我必须为所有100个类别A的页面清除或无效缓存。当添加新帖子时,使缓存的类别页面(第1页,第2页等)无效?
删除缓存页面并不是一个好主意,因为我们可能有太多文件(例如,数千页)。我认为根据请求无效缓存和重新生成页面是非常有效的方法。
我唯一的想法是将number of posts in category
添加到缓存ID。因此,首先我们应该获得类别中的帖子数量(例如,从memcache),然后检查此数字是否有效。
一切看起来很好,很简单。但是,让我们想象一下当我添加新帖子时的情况,然后在1分钟后删除另一个(旧的)帖子。帖子数量仍然为1000,某些类别页面会保持旧的状态(如果在此1分钟内没有查看它们)。
解决方案是什么?
PS:对不起我的英文,但我认为我的问题将从已经遇到这种问题的人那里清楚。
谢谢
我在我的应用程序中有2级缓存。第一级缓存对象(我为此使用memcache或redis),第二级缓存是缓存页面的部分(它有助于避免执行大量的PHP代码来构建页面)。你对last_update_timestamp的想法在我看来很简单,很好!谢谢。 – Kirzilla 2010-09-15 19:58:43