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

一、过期键删除策略

  1. 定时删除: 在设置键的过期时间的同时,创建一个定时器(timer),过期时间一到就立即执行对键的删除操作
    优点:对内存是最友好的,保证尽快删除过期键,并释放过期键所占用的内存
    缺点: 对CPU是最不友好的,在过期键比较多的情况下,删除过期键会占用cpu的较多时间,会对服务器的响应时间和吞吐量造成影响

  2. 惰性删除: 在获取键的时候对键进行过期检查,如果键过期的话就进行删除
    优点:对CPU是最友好的,保证对过期键的删除操作只会在非做不可的情况下进行,并且删除目标仅限于当前键
    缺点:对内存是最不友好的,大量不经常被访问的过期键会一直存储在内存中,占用内存空间,浪费内存

  3. 定期删除: 定期删除过期键,通过限制删除操作的执行时长和频率来减少删除操作对CPU的影响,TA是对定时删除策略和惰性删除策略的整合和折中
    难点:确定删除操作执行的时长和频率,如果删除太频繁或执行时间过长,就会退化称定时删除策略;如果删除操作执行的太少或者执行时间太短,又会退化为惰性删除策略,出现内存占用的情况

二、Redis过期键删除策略

Redis采用惰性删除和定期删除相结合的策略!

  1. 在执行所有对数据的读写命令以前做如下判断:
    在这里插入图片描述
  2. 周期性地执行定时删除函数:
    在这里插入图片描述

三、Redis内存淘汰策略

当Redis使用的内存超过允许的最大内存之后,会触发Redis的内存淘汰策略,删除一些不常用的数据,以保证Redis服务器正常运行。内存淘汰策略可以通过配置文件来修改,相应的配置项是maxmemory-policy,默认配置是noeviction。

Redis 4.0前提供 6 种数据淘汰策略:

  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的key中,移除最近最少使用的key
  • allkeys-lru:当内存不足以容纳新写入数据时,移除最近最少使用的key,这个是最常用的
  • volatile-ttl :当内存不足以容纳新写入数据时,在设置了过期时间的key中,优先移除过期时间最早(剩余存活时间最短)的key
  • volatile-random:内存不足以容纳新写入数据时,在设置了过期时间的key中,随机移除某个key
  • allkeys-random:当内存不足以容纳新写入的数据时,随机移除key
  • no-eviction:当内存不足以容纳新写入数据时,新写入操作会报错,无法写入新数据,一般不采用

Redis 4.0后增加以下两种:

  • volatile-lfu:当内存不足以容纳新写入数据时,在设置了过期时间的key中,移除最不经常(最少)使用的key
  • allkeys-lfu:当内存不足以容纳新写入数据时,移除最不经常(最少)使用的key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Malax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值