我做了一些谷歌搜索,找不到这个问题的答案。Rails 允许为其缓存指定过期时间,如下所示:
Rails.cache.fetch("my_var", :expires_in => 10.seconds)
但是如果我什么都不指定会发生什么:
Rails.cache.fetch("my_var")
它永不过期?有默认值吗?如何明确定义永不过期的东西?
我做了一些谷歌搜索,找不到这个问题的答案。Rails 允许为其缓存指定过期时间,如下所示:
Rails.cache.fetch("my_var", :expires_in => 10.seconds)
但是如果我什么都不指定会发生什么:
Rails.cache.fetch("my_var")
它永不过期?有默认值吗?如何明确定义永不过期的东西?
这实际上取决于您使用的缓存存储。Rails 提供了几种,其中最流行的是Memcached。Memcached 的主要功能之一是它会自动使旧的未使用记录过期,因此您可以忘记 :expire 选项。
其他 Rails 缓存存储,如内存存储或 redis 存储将不会过期,除非您明确指定何时执行此操作。
正如@Rahul 所说,将 Dalli 用于 memcached(谁没有),默认到期时间永远不会。正如@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"
它们永不过期。(对于基于 FileStore 的缓存,在 Rails 中是默认的)
如果在缓存存储中找到它们的键,则将使用该值。因此,始终建议添加至少任何到期时间。