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