1
[25] pry(main)> Rails.cache.fetch("my_key", :expires_in => 1.year) do
[25] pry(main)*   (Time.now.to_date).to_s
[25] pry(main)* end
=> "2013-11-01"
[28] pry(main)> Rails.cache.fetch("my_key")
=> nil

我无法理解上述行为。缓存在此之前没有这个键,或者更确切地说是nil.

expires_in如果我删除该选项,这会很好。

这是我的应用程序的生产版本,它使用memcached

 # Use a different cache store in production
  config.cache_store = :mem_cache_store, <DNS NAME>

这也适用于我的本地,我希望它是基于文件系统的缓存。

编辑:啊,1.year也许太长了..它适用于1.day. 这是一个错误还是记录在某处?

编辑:这似乎1.month是持续时间形式的最大值。但这仍然不能被接受的行为 Memcache 最大密钥过期时间

4

1 回答 1

2

从下面列出的几个来源来看,这似乎是memcached行为方式,与 rails 本身无关。如果,正如@Beerlington 所说,Rails 4.0 没有这个,它可能是在将值传递给 memcached 之前检查值。

所以,答案,

接受的最长有效期memcached为 1 个月。这在其代码中是硬编码的。如果您给出的持续时间超过 1 个月,它看起来像是写入缓存,但实际上已被删除。如果您出于某种原因需要更长的到期时间,您始终可以选择提供到期的确切时间,即1.year.from_now样式。如果以这种方式给出,这将接受更长的到期持续时间,并且我没有遇到任何最大值(也许是 2038 :P,或者不是)。

来源

  1. Memcache 最大密钥过期时间

  2. 消除 memcached 的 30 天限制

  3. https://magento.stackexchange.com/questions/5925/memcached-why-data-is-not-stored/5961?noredirect=1#5961

  4. https://groups.google.com/forum/m/#!topic/memcached/TC30yVElo8U

于 2013-11-02T07:57:16.483 回答