Rails 4片段缓存:查看更改?

时间:2014-10-28 02:00:04

标签: ruby-on-rails caching ruby-on-rails-4 view memcached

在Rails 4项目中,我想说我在视图中使用基于对象的片段缓存,如下所示:

<% cache(current_user) do %>
  <%= current_user.name %>
<% end %>

然后,每当更新current_user时,current_user缓存密钥都会更改。当高速缓存失效原因是对象本身改变时,这对于使高速缓存无效是很好的。但是视图何时发生变化呢?例如,如果我更改视图代码以显示大写的用户名(current_user保持不变),该怎么办?

<% cache(current_user) do %>
  <%= current_user.name.capitalize %>
<% end %>

基于对象的片段缓存似乎不会使缓存失效,即使视图应该更改。这是否意味着我必须定义基于视图版本进行版本化的缓存键,如下所示?

# some_helper.rb
def user_name_cache_key(user)
  [user, "v2"] # un-capitalized name was v1
end

# some_view.html.erb
<% cache(user_name_cache_key(current_user)) do %>
  <%= current_user.name.capitalize %>
<% end %>

也许这很明显,但在讨论Rails缓存的文档或博客文章中完全没有提及;他们似乎都专注于对象更新失效问题,并忽略了视图更新失效问题的技术。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我刚刚发现Cache Digests gem就是这样做并且合并到Rails 4中:

https://github.com/rails/cache_digests

真棒。