Redis如何删除设置了过期时间的key?

Redis 使用三种策略删除过期键:定时删除、惰性删除和定期删除。定时删除立即释放内存但可能消耗大量CPU;惰性删除节省CPU但可能导致内存浪费;定期删除在时间和空间上寻求平衡,通过随机抽查并限制删除操作的频率和时长来管理内存。Redis 默认每100ms随机检查并删除过期key,但需权衡CPU和内存使用。
摘要由CSDN通过智能技术生成

Redis如何删除设置了过期时间的key?

问:如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢?

如果回答是,那么面试官就会问你:🤔自己走还是我送你?

其实Redis对于过期key共有三种不同的删除策略:定时删除,惰性删除,定期删除

1.定时删除

定时删除可以保证内存中数据的最大新鲜度,因为它会将过期的键值立马删掉,其所占用的内存也随即释放,但这样恰恰对于CPU而言是不友好的,原因是删除操作会占用CPU的时间,如果刚好碰上CPU繁忙的时候,就会给CPU造成额外的负担,从而产生大量的性能消耗,也会影响数据的读取操作。一句话讲就是用CPU性能换取存储空间

2.惰性删除

惰性删除策略不同于定时删除,当数据到达过期时间的时候它不会作出处理,等到下一次访问的时候发现该数据已经过期,再去删除,并返回不存在。可以看出,这种策略对于内存是不友好的,而Redis恰恰是依赖于内存的,因此对于Redis来说肯定不是件好事。一句话讲就是用存储空间换取CPU性能

3.定期删除

定期删除策略相当于是以上两种删除策略的折中,定期删除策略会每隔一段时间执行一次删除过期键的操作,并通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。其做法为:周期性轮询 redis 库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。

3.1定期删除策略的特点
  • CPU性能占用有峰值,检测额度可以自行设置
  • 内存压力不是很多,长期占用内存的冷数据会被持续清理

总结:周期性随机抽查存储空间

3.2定期删除的举例

redis 默认每间隔 100ms 检查是否有过期的 key,如果有过期 key 则删除。注意:redis 不是每隔100ms 将所有的 key 检查一次而是随机抽取进行检查(如果每隔 100ms,对全部 key 进行检查,那么redis 直接ICU)。因此,如果只采用定期删除策略,会导致很多 key 到时间没有删除。

3.3定期删除的难点

定期删除策略的难点是确定删除操作执行的时长和频率:redis 不可能时时刻刻遍历所有被设置了过期时间的 key,来检测数据是否已经到达过期时间,然后对它进行删除。

如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成定时删除策略,以至于将 CPU 时间过多地消耗在删除过期键上面。

如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。

因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SONNIE在路上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值