Redis键过期的删除策略
键的过期删除策略
常见的过期删除策略是惰性删除、定期删除、定时删除。
-
惰性删除:只有访问这个键时才会检查它是否过期,如果过期则清除。
优点:最大化的节约CPU资源。
缺点:如果大量过期键没有被访问,会一致占用大量内存。
-
定时删除:为每个设置过期时间的key都创造一个定时器,到了过期时间就清除。
优点:可以立即清除过期的键。
缺点:会占用大量的CPU资源去处理过期的数据。
-
定期删除:每隔一段时间,就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key)该策略是惰性删除和定时删除的一个折中,既避免了占用大量CPU资源又避免了出现大量过期键不被清除占用内存的情况。
定期清理有两种模式:
SLOW
模式是定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf 的hz 选项来调整这个次数FAST
模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
Redis的过期删除策略:惰性删除 + 定期删除两种策略进行配合使用
Redis的内存淘汰机制?
当存入的数据超过Redis最大允许内存后,会触发Redis的内存淘汰策略。在Redis4.0前一共有6种淘汰策略。
volatile-lru
:当Redis内存不足时,会在设置了过期时间的键中使用LRU算法移除最近最少使用的键。volatile-ttl
:从设置了过期时间的键中移除将要过期的。volatile-random
:从设置了过期时间的键中随机淘汰一些。allkeys-lru
:根据LRU算法移除一些键。allkeys-random
:随机移除某些键。noeviction
:新的写入操作会报错。
前三个是在设置了过期时间的键的空间进行移除,后三个是在全局的空间进行移除。
4.0版本后新增以下两种:
volatile-lfu
:从设置过期时间的键中移除一些最不经常使用的键(Least Frequently Used,LFU)allkeys-lfu
:从所有键中移除一些最不经常使用的键。