如何在Rails 3.1中获取片段到期日期?

时间:2011-11-23 14:29:41

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

我需要获得缓存条目的过期或创建时间。

这适用于:sitemap index,索引中的每个站点地图都是缓存操作。我想补充一下 <lastmod>属性,在我的例子中,将是缓存条目创建时间。

例如,对于动作缓存:

class ProductsController < ActionController
  caches_action :index

  def index
    @products = Product.all
  end
end

我需要这样的东西:

Rails.cache.get(:controller=>'products',:action=>'index').created_at

2 个答案:

答案 0 :(得分:5)

我找到了解决方案,它适用于所有流行的缓存存储(使用redis_store,mem_cache_store,memory_store,file_store测试)。

Time.at(Rails.cache.send(:read_entry,'cache/entry/key',{})).created_at)

read_entry方法返回ActiveSupport::Cache::Entry对象(class documentation

答案 1 :(得分:1)

对于子孙后代,在Rails 4.2+中,您可以通过类似的方式访问@ rogal111的答案......

Time.at(Rails.cache.send(:read_entry, key, {}).expires_at)
# And
Rails.cache.send(:read_entry, key, {}).expired?

但除非你想要进入对象,否则你无法访问created_at

为此,您需要为

的效果做些什么
Rails.cache.send(:read_entry, key, {}).instance_variable_get('@created_at')