我做了一些谷歌搜索,无法找到这个问题的答案。 Rails允许为其缓存指定到期时间:
Rails.cache.fetch("my_var", :expires_in => 10.seconds)
但如果我什么都没说,会发生什么:
Rails.cache.fetch("my_var")
永不过期?有默认值吗?我怎样才能明确定义永不过期的东西?
答案 0 :(得分:14)
这实际上取决于您正在使用的缓存存储。 Rails提供了几个,其中最受欢迎的是Memcached。 Memcached的一个关键功能是它automatically expires old unused records,所以你可以忘记:expire选项。
其他Rails缓存存储(如内存存储或redis存储)将保持不会过期,除非您明确指定何时执行此操作。
答案 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中的默认值)
如果在缓存存储中找到了密钥,则将使用该值。因此,始终建议至少添加任何到期时间。