公司有个项目用了3台redis,开始时准备做集群使用,但redis集群需要php版本要7,而项目目前不支持,所以还是单独使用,这些天开发反馈其中有一台内存无法回收,跑一天32G内存就满了
先看看max有没被限制
CONFG GET maxmemory
其中被限制了,但原因应该不是这
淘汰机制 其他两台为:
maxmemory-policy volatile-ttl
有问题的机器是:
maxmemory-policy volatile-lru
noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据
volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据
初以为是expire set设置有问题,但询问得知并不是,后来解决的办法还是开发自己找了一个分析dump.rdb里面key占用的大小工具来分析数据,有任务队列的数据一直在增加,没有消掉。
参考:
expire set :http://blog.dolphin-game.com/post/65.html
如何用Redis做LRU-Cache http://blog.csdn.net/cjfeii/article/details/47259519
Redis性能问题排查解决手册(七): http://www.cnblogs.com/mushroom/p/4738170.html