Redis淘汰策略

Posted XiaoMaPro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis淘汰策略相关的知识,希望对你有一定的参考价值。

Redis淘汰策略

Redis的内存回收主要围绕Redis过期策略、Redis淘汰策略

策略名称策略说明
Redis过期策略删除过期时间的key值
Redis淘汰策略内存使用到达maxmemory上限时触发内存淘汰数据

Redis过期策略通常有以下三种:

定时过期

为每个设置过期时间的,到过期时间就会立即清除。该策略可以立即清除过期的数据,不管服务器现在的运行状况,都会立马执行,这样会占用大量的CPU资源去处理过期的数据,影响缓存的响应时间和吞吐量。

惰性过期

只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

定期过期

每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

Redis中同时使用了惰性过期和定期过期两种过期策略。


Redis淘汰策略

Redis的内存淘汰策略,是指当内存使用达到maxmemory极限时,需要使用LAU淘汰算法来决定清理掉哪些数据,以保证新数据的存入。

LRU算法

Redis默认情况下就是使用LRU策略算法。
LRU算法(least RecentlyUsed),最近最少使用算法,也就是说默认删除最近最少使用的键。
redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。配置文件中的maxmeory-samples 3 。如果设置为10,那么效果会更好,不过也会耗费更多的CPU资源。

缓存清理配置

maxmemory用来设置redis存放数据的最大的内存大小,一旦超出这个内存大小之后,就会立即使用LRU算法清理掉部分数据。
对于64 bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽机器中所有的内存为止;,但是对于32 bit的机器,有一个隐式的闲置就是3GB

Redis数据淘汰策略

maxmemory-policy,可以设置内存达到最大闲置后,采取什么策略来处理。

规则名称规则说明
noeviction当内存不足以容纳新写入数据时,新写入操作会报错。
allkeys-lru当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
allkeys-random当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
volatile-lru当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。(默认值)
volatile-random当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
缓存清理的流程

客户端执行数据写入操作redis server接收到写入操作之后,检查maxmemory的限制,如果超过了限制,根据对应的policy清理掉部分数据否则执行写入操作完成后执行。

以上是关于Redis淘汰策略的主要内容,如果未能解决你的问题,请参考以下文章

Redis Key过期淘汰策略

redis的过期策略以及内存淘汰机制

Redis过期键删除策略和内存淘汰策略

Redis 键的过期删除策略及缓存淘汰策略

Redis过期删除策略和内存淘汰策略

Redis过期删除策略和内存淘汰策略