我遇到了设置redis缓存以存储序列化Java对象的问题(平均大小约为30k) 我们刚刚更改了实现,以便所有缓存的对象都没有到期(ttl == -1)
然后我改变了redis.conf,就像这样
set maxmemory-policy allkeys-lru (was volatile-ttl)
set maxmemory-samples 7 (was 3=default)
set maxmemory 1gb (was 300mb)
我们有以下'保存'适当的规则
save 900 1
save 300 10
save 60 10000
问题在于,只要保存1000-8000个密钥,整个缓存就会从0开始重新刷新。
我找不到这个来源,我试着做
redis-cli monitor | grep "DEL"
但它显示没有发出大量删除 我也试过
redis-cli monitor | grep flush
但是几分钟内根本没有输出。 我尝试在增加maxmemory设置后重新启动redis服务(虽然我不应该这样做),但这表明行为没有任何变化。
以前有人见过这样的事吗? 注意:我们使用Redis 2.8 - 如果在以后的版本中有补丁,我愿意升级 如果您需要更多细节来缩小问题,请告诉我。
谢谢!
答案 0 :(得分:3)
该问题最终导致用户错误。 在我们的客户端代码中,程序调用了redis.del(keyname),随后调用了redis.flushDB(),程序员在不知不觉中添加了这些内容,试图将更改推送到数据库。
如果我稍微改进了我的grep,我会早点发现这个问题:
redis-cli monitor | grep -i flush