Redis Key过期淘汰策略
Posted 尊宝雷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis Key过期淘汰策略相关的知识,希望对你有一定的参考价值。
一、Redis key过期策略
Redis会将每个设置了过期时间的key放入到一个独立的字典中,以后会定时遍历这个字典来删除过期的key;
除了定时遍历之外,它还会使用惰性策略来删除过期的key,所谓惰性策略就是在客户端访问这个key时,redis对key的过期时间进行检查,如果过期了就立即删除,定时删除是集中处理,惰性删除是零散处理;
1、定时扫描删除
- Redis配置项hz定义了serverCron任务的执行周期,默认为10,即CPU空闲时每秒执行10次;
- 从过期字典中随机选20个key,删除这20个key中已经过期的key,再拿20个key,检查过期的key比率超过1/4,那就重复步骤1;
- 每次过期key清理的时间不超过CPU时间的25%,即若hz=1,则一次清理时间最大为250ms,若hz=10,则一次清理时间最大为25ms;
- 从库的过期策略:从库不会进行过期扫描,从库对过期的处理时被动的,主库在key到期是,会在AOF文件里增加一条del指令,同步到所有从库,从库通过执行这条del指令来删除过期的key。
2、惰性删除策略
在生产环境中为了限制redis实例最大使用内存,redis提供了配置参数maxmemory来限制内存超出,在实际内存超出maxmemory时,redis提供了几种可选策略(maxmemory-policy)供用户选择:
- noeviction 不会继续服务写请求(DEL请求可以继续服务),读请求可以继续进行,这样可以保证数据不丢失,但是会让线上业务不能持续进行,这是默认的淘汰策略;
- volatile-lru 尝试淘汰设置了过期时间的key中使用频率最低的key,没有设置过期时间的key不会被淘汰,这样可以保证需要持久化的数据不会丢失;
- volatile-ttl 尝试淘汰设置了过期时间的key中ttl值最小的key;
- volatile-random 随机淘汰设置了过期时间的key;
- allkeys-lru 区别于volatile-lru 这个策略要淘汰的key对象是全体的key集合;
- allkeys-random 随机淘汰redis实例中所有key。
以上是关于Redis Key过期淘汰策略的主要内容,如果未能解决你的问题,请参考以下文章