• redis内存无法回收

    公司有个项目用了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

发表评论

邮箱地址不会被公开。 必填项已用*标注