vlambda博客
学习文章列表

redis的内存满的时候key的淘汰策略

背景

    在实际生产中,定期删除和惰性删除是结合使用的,但结合使用也可能导致有部分过期key仍旧驻留在内存中,这部分的key在定期删除的时 候没有被随机选中,同时在惰性删除的时候也没有被用户访问,因此可能产生爆内存的情况发生。


触发条件:redis服务端分配的内存被占满了


八种淘汰策略

    在redis配置文件中 通过maxmemory_policy参数确定redis在内存满的时候如何淘汰过期key 

    1、volatile-lru(least recently used) 最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉; 

    2、volatile-lfu(least frequently used) 最近最不经常使用算法,从设置了过期时间的键中选择某段时间之内使用频次最小的键值对清除掉; 

    3、volatile-ttl 从设置了过期时间的键中选择过期时间最早的键值对清除 (删除即将过期的);

    4、volatile-random 从设置了过期时间的键中,随机选择键进行清除;

    5、allkeys-lru 最近最少使用算法,从所有的键中选择空转时间最长的键值对清除;

    6、allkeys-lfu 最近最不经常使用算法,从所有的键中选择某段时间之内使用频次最少的键值对清除;

    7、allkeys-random 所有的键中,随机选择键进行删除;

    8、noeviction 不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误;但是读操作都能正常的进行;


info命令查看缓存淘汰策略


提示:

在config修改maxmemory_policy参数的时候会报如下错误。【应该下划线转为中横线】

127.0.0.1:6379> config set maxmemory_policy volatile-lru(error) ERR Unsupported CONFIG parameter: maxmemory_policy
127.0.0.1:6379> config set maxmemory-policy volatile-lruOK