片段缓存不会更新30分钟

时间:2016-06-27 00:59:22

标签: ruby-on-rails ruby-on-rails-4

我有一个片段缓存设置到期30分钟。

<% cache(:expires_in => 30.minutes) do %>
   <!-- table with items -->
<% end %>

它创建了第一个缓存,但现在表中的项目正在更新,它仍然显示旧数据。自项目更新以来已经过了几个小时。我已经清除了浏览器中的缓存,但它仍然使用它制作的第一个缓存。

这是我第一次设置缓存,所以我可能做错了。

更新

每次更新项目时,我都不热衷于更新缓存。原因是每个项目都有很多values,项目值是表格中显示的内容。每次更新项目时,实际项目记录都不会更新,但所有值都会更新。如果每次更新值时都有缓存刷新,则每次更新项目时都会重新刷新缓存10次,因为所有项目值都会同时更新。

因此,我认为每30分钟更新一次表就可以了。

2 个答案:

答案 0 :(得分:0)

我认为您使用的fragment_cache并不完全正确。

因为rails名为method,名称为:expire_fragment

<% cache(key, :expires_in => set_time_here) do %>
   <!-- content -->
<% end %>

expire_fragment(key) 

您可以重写为:

def expire_items_cache
  puts "expire_items_cache"
  expire_fragment("items") 
end

<% cache("items", expires_in: 30.minutes) do %>
   <!-- table with items -->
<% end %>

您可以在fragment_caching

上推荐更多内容

答案 1 :(得分:0)

手动缓存过期已失效,请尝试基于密钥的过期,如果您未提供手动缓存过期时间,则密钥会在对象更改时自动更改,因为updated_at更改密钥会自动更改并且新的缓存将得到构建,你不必担心旧的缓存它很适合你,并在需要时刷新(Memcache),所以试试这个

<% cache([items,items.max(:updated_at)]) do %>
   <!-- table with items -->
<% end %>

还有一个没有在您的浏览器中缓存它停留在您的服务器缓存存储中 Rails Guide Caching并寻找fragement缓存 试着看看这个铁路广播Fragment Caching