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

sub*_*ing 19 caching ruby-on-rails ruby-on-rails-3

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

Rails.cache.fetch("my_var", :expires_in => 10.seconds)
Run Code Online (Sandbox Code Playgroud)

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

Rails.cache.fetch("my_var")
Run Code Online (Sandbox Code Playgroud)

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

ice*_*cem 15

这实际上取决于您正在使用的缓存存储.Rails提供了几种,其中最受欢迎的是Memcached.Memcached的一个关键功能是它会自动使旧的未使用记录过期,因此您可以忘记:expire选项.

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

有关缓存密钥到期如何在Rails中工作的更多信息.

  • 我使用 :expires_in 作为定义我认为数据需要有多新的手段。如果我认为 5 分钟的旧数据可以用于某事,我使用 expires_in: 5.minutes。我使用缓存的主要原因是加快并发和锤击速度。 (2认同)

oma*_*oma 10

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

查看官方dalli文档:

Expires_in default is 0, which means never
Run Code Online (Sandbox Code Playgroud)

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

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

config.cache_store = :dalli_store, { expires_in: 1.day}
Run Code Online (Sandbox Code Playgroud)

并为了更好的个人控制:

Rails.cache.write "some_cache_key", some_cachable_string, expires_in: 3.hours
Run Code Online (Sandbox Code Playgroud)

新的文档http://apidock.com/rails/ActiveSupport/Cache/Store/write并没有多说,但旧的做法:http: //apidock.com/rails/ActiveSupport/Cache/MemCacheStore/write

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

Rails.cache.delete "some_cache_key"
Run Code Online (Sandbox Code Playgroud)


Rah*_*arg 6

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

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

  • 这似乎是逻辑,但你有任何参考吗?我一直在寻找,我无处可寻.此外,我的系统表现得像是有一个默认的到期时间,我想排除由于一些缓存隐藏的默认值的可能性.此外,这不会依赖于底层缓存存储吗? (7认同)