我在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。
我该如何纠正?
答案 0 :(得分:0)
乍一看,如果默认保持活动时间值很低(10分钟或500秒都是可能的默认值),这似乎是可能的。
由于您未设置expires_in
(或等效的time_to_live
字段),因此密钥将设置为默认时间,之后该值将过期。
参考here:
设置
:expires_in
将在缓存上设置到期时间。所有缓存都在指定的秒数后支持自动过期内容。可以将此值指定为构造函数的选项(在这种情况下,所有条目都将受到影响),或者可以将其提供给fetch或write方法以仅影响一个条目。