我正在这样的页面上缓存一些html:
<% cache do %>
<%= some_field %> minutes ago
<% end %>
我不希望db查询检查该字段(这是需要的),但是仍然希望缓存在30分钟后过期。
默认持续多长时间?那么可以采取什么措施来过期?
答案 0 :(得分:2)
你正在做的是在Rails中称为片段缓存。
Rails Fragment caching将持续到下列任何一个发生的第一个
expire_fragment
您的缓存商店到期时间取决于您的应用使用的商店。如果您正在使用文件系统,缓存可能会持续很长时间(几天,几周等)。
已添加如果您使用memcache作为商店,则memcache会有一个整体过期时间。如果你限制了内存缓存的整体大小,并且在添加新值时它没有空间,那么加上内存缓存将使最早触及的项目失效,首先过期。
自动过期使缓存项过期的好方法是将它们存储在内存缓存中,并在有新数据时自动使它们过期。通过使用缓存键中的版本号来执行此操作。见The Secret to Memcached
Re:30分钟后过期执行此操作的一种方法是使用memcache并将整体过期时间设置为30分钟。或者你可以有一个cron作业(或者delay_job或其他求职者),每30分钟调用一次expire_fragment。