Memcache无法获取值

时间:2015-08-09 12:54:26

标签: ruby-on-rails memcached dalli

我在memcache中设置了10000个键

for i in 1..10000
  Rails.cache.write("short_key#{i}", i)
end

大约500秒后(没有基准但发生在10米左右),当我做

_random = rand(10000) 
Rails.cache.read("short_key#{_random}")

返回nil。这可以。 Memcached LRU策略可能已经破坏了这些密钥。

但是,问题是我在服务器上看到了很多可用内存。

另外,当我在telnet会话中运行以下命令时,

stats cachedump 1 10

我得到了一些我之前在循环中设置的随机密钥,即使我尝试通过rails或telnet / get获取它们,memcached也无法读取该值。

这些关键/值正在耗尽记忆但不知何故被摧毁。

我使用dalli连接memcached。

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

乍一看,如果默认保持活动时间值很低(10分钟或500秒都是可能的默认值),这似乎是可能的。

由于您未设置expires_in(或等效的time_to_live字段),因此密钥将设置为默认时间,之后该值将过期。

参考here

  

设置:expires_in将在缓存上设置到期时间。所有缓存都在指定的秒数后支持自动过期内容。可以将此值指定为构造函数的选项(在这种情况下,所有条目都将受到影响),或者可以将其提供给fetch或write方法以仅影响一个条目。