Ruby on rails 片段缓存未在30分钟内更新
我的碎片缓存设置将在30分钟内过期Ruby on rails 片段缓存未在30分钟内更新,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的碎片缓存设置将在30分钟内过期 <% cache(:expires_in => 30.minutes) do %> <!-- table with items --> <% end %> 30分钟)完成%> 它进行了第一次缓存,但现在表中的项正在更新,它仍然显示旧数据。自项目更新以来已过了数小时。我已清除浏览器中的缓存,但它仍使用它创建的第一个缓存 这是我第一次设置缓存,这样我可能会做错什么 更新 我不喜欢每次更新项目时都更新缓存。原因是每
<% cache(:expires_in => 30.minutes) do %>
<!-- table with items -->
<% end %>
30分钟)完成%>
它进行了第一次缓存,但现在表中的项正在更新,它仍然显示旧数据。自项目更新以来已过了数小时。我已清除浏览器中的缓存,但它仍使用它创建的第一个缓存
这是我第一次设置缓存,这样我可能会做错什么
更新
我不喜欢每次更新项目时都更新缓存。原因是每个项目都有许多值
,项目值就是表上显示的值。每次更新项目时,实际项目记录不会更新,但所有is值都会更新。如果每次更新一个值时缓存都会刷新,那么每次更新一个项时缓存都会刷新10次,因为所有这些项的值都会同时更新
因此,我认为每30分钟更新一次表就可以了。我认为您使用的
fragment\u cache
并不完全正确
因为rails有方法
,该方法的名称为:expire\u fragment
<% cache(key, :expires_in => set_time_here) do %>
<!-- content -->
<% end %>
expire_fragment(key)
在此处设置时间)do%>
expire\u片段(键)
您可以重写为:
def expire_items_cache
puts "expire_items_cache"
expire_fragment("items")
end
<% cache("items", expires_in: 30.minutes) do %>
<!-- table with items -->
<% end %>
def过期\u项目\u缓存
将“过期\u项\u缓存”
过期\u片段(“项目”)
结束
你可以在上查阅更多信息,我认为你使用的
片段缓存
并不准确
因为rails有方法
,该方法的名称为:expire\u fragment
<% cache(key, :expires_in => set_time_here) do %>
<!-- content -->
<% end %>
expire_fragment(key)
在此处设置时间)do%>
expire\u片段(键)
您可以重写为:
def expire_items_cache
puts "expire_items_cache"
expire_fragment("items")
end
<% cache("items", expires_in: 30.minutes) do %>
<!-- table with items -->
<% end %>
def过期\u项目\u缓存
将“过期\u项\u缓存”
过期\u片段(“项目”)
结束
您可以在手动缓存过期失效时参考更多信息,尝试基于密钥的过期如果不提供手动缓存过期时间,则当对象更改时,密钥将自动更改,由于
在处更新了\u,所以密钥将自动更改,新缓存将生成,您无需担心旧缓存,它为您提供了良好的解决方案,并在需要时将其清除(Memcache),因此请尝试此方法
<% cache([items,items.max(:updated_at)]) do %>
<!-- table with items -->
<% end %>
还有一个,它不会缓存在浏览器中,而是留在服务器缓存存储中
并查找fragement缓存
也可以尝试观看此Railcast手动缓存过期失效,尝试基于密钥的过期如果不提供手动缓存过期时间,则当对象更改时,密钥将自动更改,由于在处更新了\u,所以密钥将自动更改,新缓存将生成,您无需担心旧缓存,它为您提供了良好的解决方案,并在需要时将其清除(Memcache),因此请尝试此方法
<% cache([items,items.max(:updated_at)]) do %>
<!-- table with items -->
<% end %>
还有一个,它不会缓存在浏览器中,而是留在服务器缓存存储中
并查找fragement缓存
请尝试观看此Railcast关于“我已清除浏览器中的缓存…”的内容,我认为内容实际上缓存在Rails中。缓存
,而不是浏览器的缓存。是的,但我认为可能是我的浏览器缓存了页面。关于“我已清除浏览器中的缓存…”--我认为内容实际上缓存在Rails.cache
中,而不是浏览器的缓存中。是的,但我认为可能是我的浏览器缓存了页面。给出了错误<代码>没有将符号隐式转换为整数
会给出错误<代码>无符号到整数的隐式转换