WEB缓存_缓存过期策略

可以通过过期时间来控制内容过期的情况

比如在一个网站上,总会有一些每日之星用户,或者今日推荐文章。这些内容的新鲜期都很长,比如每日之星的数据,如果 20分钟更新一次,用户也不会有异议。那么,我们在查询出这些用户后,可以将结果集存入缓存中,并设置过期时间为 20 分钟。待自动失效后,再重新查询。


无法通过过期时间来控制内容过期的情况

这时有两个策略。一是【主动过期】,二是【被动过期】。比如想要缓存一篇文章的内容 HTML,但文章的页面中包含了评论信息。一些老文章被大量访问而无人添加评论时,缓存的效果杠杠的。但一些近期文章会被用户添加评论,我们无法判断用户何时会添加评论,所以无法得到一个最佳实践的文章过期时间。


主动过期:   顾名思义,主动地去 delete 缓存。我们可以在评论的 model 中,设置一个回调逻辑。每当评论被更新时,同时去删除评论所对应的文章的缓存内容。


被动过期:   被动过期也需要回调逻辑,只是相对主动过期来说。它不必理解缓存层的存在。当我们缓存一个文章页面时,不仅以文章的 id 为 cache key,还在cache key 中拼入文章的update 字段。当评论更新时,让评论去 touch一下对应的文章,更新文章的最后修改日期。那么当用户再次访问文章时,由于 cache key变动,过期的内容就不会被展现,从而实现了被动过期。 

同样的例子还有,一篇文章是以 markdown 写成,每次输出的时候,都要进行 markdown 渲染,这是个耗时操作。于是我们可以将'markdown_result_' + artical.id + artical.updated作为key,来缓存markdown 的渲染结果。每当文章更新时,被动地废弃旧有的缓存结果。

猜你喜欢

转载自blog.csdn.net/sxj6977380/article/details/78759531