未经同意定期刷新 Redis 缓存
Redis cache is flushed periodically without consent
我在设置用于存储序列化 Java 对象(平均 ~30k 大小)的 Redis 缓存时遇到问题
我们只是更改了实现,以便所有缓存对象都没有过期时间 (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' 规则
save 900 1
save 300 10
save 60 10000
问题是每当保存 1000-8000 个键时,整个缓存都会刷新为 0,重新开始。
我找不到这个的来源,我试过了
redis-cli monitor | grep "DEL"
但它显示没有发出大量删除
我也试过
redis-cli monitor | grep flush
但这几分钟没有任何输出。
我尝试在增加 maxmemory-setting 后重新启动 redis 服务(虽然我不应该这样做),但这也没有显示行为发生变化。
有人以前见过这样的东西吗?
注意:我们使用的是 Redis 2.8 - 如果以后的版本有补丁,我愿意升级
如果您需要更多详细信息来缩小问题范围,请告诉我。
谢谢!
问题最终是用户错误。
在我们的客户端代码中,程序正在调用 redis.del(keyname) 和随后的 redis.flushDB(),这是程序员在不知不觉中添加的,试图将更改推送到数据库。
如果我稍微改进一下 grep,我会更快地发现问题:
redis-cli monitor | grep -i flush
我在设置用于存储序列化 Java 对象(平均 ~30k 大小)的 Redis 缓存时遇到问题 我们只是更改了实现,以便所有缓存对象都没有过期时间 (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' 规则
save 900 1
save 300 10
save 60 10000
问题是每当保存 1000-8000 个键时,整个缓存都会刷新为 0,重新开始。
我找不到这个的来源,我试过了
redis-cli monitor | grep "DEL"
但它显示没有发出大量删除 我也试过
redis-cli monitor | grep flush
但这几分钟没有任何输出。 我尝试在增加 maxmemory-setting 后重新启动 redis 服务(虽然我不应该这样做),但这也没有显示行为发生变化。
有人以前见过这样的东西吗? 注意:我们使用的是 Redis 2.8 - 如果以后的版本有补丁,我愿意升级 如果您需要更多详细信息来缩小问题范围,请告诉我。
谢谢!
问题最终是用户错误。 在我们的客户端代码中,程序正在调用 redis.del(keyname) 和随后的 redis.flushDB(),这是程序员在不知不觉中添加的,试图将更改推送到数据库。
如果我稍微改进一下 grep,我会更快地发现问题:
redis-cli monitor | grep -i flush