Rail中的片段缓存持续多长时间?

时间:2011-11-18 00:38:42

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我正在这样的页面上缓存一些html:

<% cache do %>
  <%= some_field %> minutes ago
<% end %>

我不希望db查询检查该字段(这是需要的),但是仍然希望缓存在30分钟后过期。

默认持续多长时间?那么可以采取什么措施来过期?

1 个答案:

答案 0 :(得分:2)

你正在做的是在Rails中称为片段缓存。

Rails Fragment caching将持续到下列任何一个发生的第一个

  • 您致电expire_fragment
  • 你的扫地机将片段,所有片段,所有内容等都过期
  • 您的缓存商店到期

您的缓存商店到期时间取决于您的应用使用的商店。如果您正在使用文件系统,缓存可能会持续很长时间(几天,几周等)。

已添加如果您使用memcache作为商店,则memcache会有一个整体过期时间。如果你限制了内存缓存的整体大小,并且在添加新值时它没有空间,那么加上内存缓存将使最早触及的项目失效,首先过期。

自动过期使缓存项过期的好方法是将它们存储在内存缓存中,并在有新数据时自动使它们过期。通过使用缓存键中的版本号来执行此操作。见The Secret to Memcached

Re:30分钟后过期执行此操作的一种方法是使用memcache并将整体过期时间设置为30分钟。或者你可以有一个cron作业(或者delay_job或其他求职者),每30分钟调用一次expire_fragment。