如何以正确的方式使缓存无效?

Ken*_*Dev 7 caching ruby-on-rails

我有一个非常具体的缓存情况.我们使用多种解决方案进行缓存,我想知道在用户操作上使缓存无效的最佳解决方案是什么.

缓存是这样的

  • 第一层:CDN将整个页面缓存为已注销用户的HTML

  • 第二层:memcached中的完整页面缓存,用于注销用户我有第二层的原因是响应边缘,有时并非所有边缘都被缓存,所以我也想从缓存中"回答"边缘.

  • 第三层:缓存登录用户的HTML部分和数据库数据.

我的问题是我的失效过程现在非常基于第三层,我没有足够好地回答第二层和第一层.

我的问题是:什么是从完全没有与URL耦合的缓存键使完整URL上的缓存无效的最佳方法?例如,如果我有旅行计划,在旅行计划内有评论,我想在用户评论新评论时使整页旅行计划URL无效.

注释模型没有URL,"父"也没有URL,同样的注释也会在城市页面中显示,所以它完全是一个可重用的对象和部分.

Lis*_*nge 3

我在 37signals博客上阅读了 David Heinemeier Hansson 的一些博文。

他们解决这个问题的方法是缓存页面上的所有不同对象,然后使用 CSS 和 JS 自定义视图。

  • 第一篇文章中,DHH 介绍了他们用来让 Basecamp 的新界面变得如此之快的技术。
  • 第二篇文章中,他介绍了基于密钥的过期是如何工作的。

它可能无法解决您的问题,但根据您给出的描述,我认为它至少可以给您一些提示。

  • 这实际上是一个非常好的解决方案,改变了我对缓存的看法。如果发起这个帖子的人还没有读过这些帖子,他应该读一下。这听起来正是他所需要的(如果内部发生变化,则整个页面无效)。 (2认同)