Redis缓存在未经同意的情况下定期刷新

时间:2015-06-18 13:33:46

标签: java caching redis flush

我遇到了设置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 - 如果在以后的版本中有补丁,我愿意升级 如果您需要更多细节来缩小问题,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:3)

该问题最终导致用户错误。 在我们的客户端代码中,程序调用了redis.del(keyname),随后调用了redis.flushDB(),程序员在不知不觉中添加了这些内容,试图将更改推送到数据库。

如果我稍微改进了我的grep,我会早点发现这个问题:

redis-cli monitor | grep -i flush