让我们想象我们有类别的博客 A. 。类别 A 目前在100页上有1000个帖子。所有页面都在文件中缓存(例如,由Smarty Template Engine缓存)。我正在添加帖子,并希望将其立即显示在第一页上。因此,我必须清除或为类别的所有100页清除或无效。

删除缓存页面不是一个好主意,因为我们可以拥有太多的文件(例如,成千上万页)。我认为,应要求无效的缓存和再生页面是更有效的方法。

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

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

解决办法是什么?

PS:对不起,我的英语,但我认为我的问题将从已经面临此类问题的人那里清楚。

谢谢

有帮助吗?

解决方案

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

我可以想到的几个策略:

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top