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)
它永不过期?有默认值吗?我怎样才能明确定义永不过期的东西?
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)
它们永不过期.(对于基于FileStore的缓存,这是Rails中的默认值)
如果在缓存存储中找到它们的密钥,则将使用该值.因此,始终建议至少添加任何到期时间.