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

Redis的过期策略包括定期删除和惰性删除,前者在固定时间间隔随机检查并删除过期key,后者在访问key时检查并删除。内存淘汰策略在内存超出限制时启用,包括noeviction、LRU、LFU等不同模式,用于选择性地移除key。Redis4新增了volatile-lfu和allkeys-lfu策略,LFU考虑了访问频率和时间,而LRU主要保护最近写入的key。
摘要由CSDN通过智能技术生成

  过期策略

过期策略是指Redis设置过期时间且key已经到达过期时间时删除该key,一般有定期删除和惰性删除;

定期删除是指每隔固定时间扫描key,对已经过期的key做清除操作;

定期删除时并不会实际对key做全量扫描,而是随机抽取固定数量的设置了过期时间的key,如果样本中已经过期的key比例超过25%,则清除这些key并重新随机抽取,直到样本中过期的key的比例小于25%

惰性删除是指在key被访问的时候检查该key是否过期,如果过期则清除;

比较:定期删除浪费系统性能,但是保证预留足够的内存;

惰性删除不会浪费系统资源,但是可能造成过期key删除不及时,造成内存浪费;

内存淘汰策略

内存淘汰是指当内存使用量超过了配置的maxmemory时,自动触发对Redis内存的回收,无论key是否过期或者key是否设置了过期时间,跟具体的淘汰策略有关,只是为了释放内存保证Redis的正常运行;maxmemory-plolicy参数配置

常见的内存淘汰策略有:

  1. noeviction:不淘汰任何数据,内存不足时新增操作返回异常--默认
  2. allkeys-random:随机淘汰任意键值--淘汰多少
  3. allkeys-lru:所有键中最久未被使用的key
  4. volatile-LRU:淘汰设置过期时间的最久未被使用的key
  5. volatile-ttl:优先淘汰设置过期时间中更早过期的key
  6. volatile-random:随机淘汰设置了过期时间的key

Redis4中增加了两种:

  1. volatile-lfu:设置过期时间中最少使用次数的key
  2. allkeys-lfu:所有键中最少使用次数的key

对比:LRU保护最新写入的key;lfu可能淘汰掉新写入的key;

LFU实现:

 相同访问频次下比较访问时间,淘汰访问时间最久(lru即上次访问时间戳最小)的key;

LRU实现:

近似LRU--随机抽取(默认为5)个key,找出lru最小的key并淘汰;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值