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

时间:2012-03-20 22:46:20

标签: ruby-on-rails caching

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

缓存是这样的

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

  • 第二层:已注销用户的memcached中的完整页面缓存 我有第二层的原因是响应边缘,有时不是所有边都被缓存,所以我也想从缓存中“回答”边缘。

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

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

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

评论模型没有URL,“父”也没有URL,同样的评论也会在城市页面中出现,所以它完全是一个可重用的对象而且是部分的。

1 个答案:

答案 0 :(得分:3)

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

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

  • first post DHH经历了他们用来使Basecamp的新界面非常快的技术。
  • second post中,他了解了基于密钥的过期方式。

它可能无法解决您的问题,但根据您提供的说明,我认为它至少可以为您提供一些提示。