Rails缓存未到期

时间:2012-12-30 02:36:42

标签: ruby-on-rails caching memcached dalli

由于某种原因,以下内容在10秒后不会过期

def rcache_value
  @random_val_from_cache = Rails.cache.fetch("random_val_from_cache",:expires_in=>10.seconds) do
  rand 10000
end

我在我的应用页脚中输出@random_val_from_cache。我的参数错了吗?我在Rails 3上。

2 个答案:

答案 0 :(得分:0)

好吧,假设您的示例中的语法错误只是SO上的拼写错误,那么问题很可能是因为您正在使用实例变量。缓存的值设置为该实例变量,除非手动完成,否则不会重置该实例变量,除非重新加载该类(在重新启动服务器之前不会发生这种情况)。你应该这样做:

def rcache_value
  Rails.cache.fetch("random_val_from_cache", :expires_in => 10.seconds) do
    rand 10000
  end
end

并将其命名为:

<%= rcache_value %>

答案 1 :(得分:0)

找到答案。在fetch中不推荐使用expires_in,而是将其设置为write。因此,您必须编写一个检查以查看它是否已存在于缓存中,如果不存在则执行写入