Rails缓存的默认到期时间是多少?

时间:2013-01-18 17:44:49

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

我做了一些谷歌搜索,无法找到这个问题的答案。 Rails允许为其缓存指定到期时间:

Rails.cache.fetch("my_var", :expires_in => 10.seconds)

但如果我什么都没说,会发生什么:

Rails.cache.fetch("my_var")

永不过期?有默认值吗?我怎样才能明确定义永不过期的东西?

3 个答案:

答案 0 :(得分:14)

这实际上取决于您正在使用的缓存存储。 Rails提供了几个,其中最受欢迎的是Memcached。 Memcached的一个关键功能是它automatically expires old unused records,所以你可以忘记:expire选项。

其他Rails缓存存储(如内存存储或redis存储)将保持不会过期,除非您明确指定何时执行此操作。

More about how cache key expiration works in Rails.

答案 1 :(得分:10)

将Dalli用于memcached(谁没有),默认的到期时间永远不会像@Rahul所说的那样。你不必担心垃圾收集,正如@icem所说,memcached扔掉了旧的未使用的记录。

请参阅官方dalli文档:

Expires_in default is 0, which means never

https://github.com/mperham/dalli#configuration

您可以设置dalli的全局到期时间

config.cache_store = :dalli_store, { expires_in: 1.day}

并且为了更好的个人控制:

Rails.cache.write "some_cache_key", some_cachable_string, expires_in: 3.hours

新文档http://apidock.com/rails/ActiveSupport/Cache/Store/write并没有说太多,但旧版的确如此: http://apidock.com/rails/ActiveSupport/Cache/MemCacheStore/write

手动使缓存失效(如果发生某些事件):

Rails.cache.delete "some_cache_key"

答案 2 :(得分:5)

他们永不过期。 (对于基于FileStore的缓存,这是Rails中的默认值)

如果在缓存存储中找到了密钥,则将使用该值。因此,始终建议至少添加任何到期时间。