该问题基于2篇文章:
- Basecamp Next 来自 37signals 的 DHH
- Advanced Caching in Rails通过亚当霍金斯
我对使用俄罗斯娃娃缓存的性能影响有点困惑,具体来说:
cache [post, 'main-content']
...cache [post, 'comments']
添加评论时,它会更改帖子的时间戳,从而使两个整体无效。然而,main-content
没有改变——你不想再生它!!!如何仅使评论无效。 (这实际上是一个非常常见的用户案例 - 一个模型有几个逻辑上独立的部分:对象本身、不同的关联、其他存储中的数据等)对我来说,似乎俄罗斯娃娃缓存只有在嵌套对象的层次结构很深时才有意义。(在大本营中,您有项目-> 待办事项列表 -> 待办事项 -> 项目列表)。但是,如果您的层次结构较浅,最好自己进行失效。
对于任何反馈,我们都表示感谢!
谢谢。
最佳答案
:touch
除了 updated_at
之外,它还会更新该属性- 也许有一种方法可以跳过更改 Post#updated_at
并且只更新像 comments_updated_at
这样的列.然后您可以使用后者进行缓存。但是,如果您试图避免访问数据库,则必须为此时间戳存储另一个缓存键(如上面的 #1)。 我想你必须决定这一切对你来说是否值得。这两篇文章展示了简单的、人为的例子来教授这些原则。在具有复杂关联的应用程序中,“分代”缓存方法可能更易于管理。
关于ruby-on-rails - 带有自动过期 key 的俄罗斯娃娃片段缓存 - 性能优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863915/