23

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

Rails.cache.fetch("my_var", :expires_in => 10.seconds)

但是如果我什么都不指定会发生什么:

Rails.cache.fetch("my_var")

它永不过期?有默认值吗?如何明确定义永不过期的东西?

4

3 回答 3

18

这实际上取决于您使用的缓存存储。Rails 提供了几种,其中最流行的是Memcached。Memcached 的主要功能之一是它会自动使旧的未使用记录过期,因此您可以忘记 :expire 选项。

其他 Rails 缓存存储,如内存存储或 redis 存储将不会过期,除非您明确指定何时执行此操作。

更多关于缓存键过期如何在 Rails 中工作。

于 2013-04-26T22:46:06.250 回答
10

正如@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"
于 2013-12-16T11:21:55.170 回答
6

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

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

于 2013-01-18T17:55:30.043 回答