Gem cache_digests - 帮助解决 fragment_caching 时模版修改 cache 过期的困难

huacnlee · 2012年08月15日 · 最后由 PlayMonkey 回复于 2012年09月04日 · 2903 次阅读

https://github.com/rails/cache_digests

如果你在使用 Fragment Cache 的话,你可能会苦恼,有时候模版改变了,清理旧的 cache 数据会很麻烦。cache_digests 可以帮你解决这个难题,他会把局部模版的文件生成一个 md5 digest,并用这个 digest 作为 cache() 方法的 key 的一项内容。这就意味着,当模版有任何的修改,cache key 将会改变,同时 cache 也就等于更新了。

在这之前,我们往往这样来处理模版过期的问题:

# app/views/comments/_comment.html.erb
<% cache [ "v1", comment ] do %>
  My comment: <%= comment.body %>
<% end %>

给 cache key 增加一个版本号,有修改的时候提升一下版本号...


另外,据 Twitter 上面 @dhh 说 cache_digests 将会引入 Rails 4.0 里面:

@dhh: cache_digests will be in Rails 4.0. As will another forthcoming gem, etagger, to pair these cache versions with etags. Russian Doll hurray!

其实实现超简单,完全可以自己写一个...

A render B -> B render C -> C A,B,C 都做 cache。 如果我们修改了 C,那么 A、B 的 cache 版本也要改变,而这个关系是没有显式的声明的。 cache_digests 有帮我们做这么一件事,模板的依赖。

文档的解释的重点就是这样子吧。蛮有用的啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号