redis过期键删除策略

一、过期键删除三种策略简介

1、定时删除策略

在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。

   优点:对内存是最友好的,保证过期键会尽可能快地被删除,并释放过期键所占用的内存。

   缺点:对cpu时间是最不友好的,过期键比较多的情况下,删除键会占用相当一部分的cpu时间,无疑会对服务器的响应时间和吞吐量造成影响。

2、惰性删除策略

程序只会在取出键时才对键进行过期检查。

   优点:对cpu时间来说是最友好的,可以保证过期键的删除操作只会在非做不可的情况下进行,并且删除目标仅限于当前处理的键。

   缺点:对内存是最不友好的,如果一个键已经过期,而这个键又仍然保留在数据库中,只要过期键不被删除,占用的内存就不会被释放。

3、定期删除策略

每隔一段时间执行一次删除过期键的操作,通过限制删除操作执行时长和频率来减少删除操作对cpu时间的影响,是对定时删除策略和惰性删除策略的整合和折中。

   难点是确定删除操作执行的时长和频率,如果删除太频繁或执行时间过长,就会退化称定时删除策略;如果删除操作执行的太少或者执行时间太短,又会退化为惰性删除策略,出现浪费内存的情况。

二、redis的过期删除策略

使用惰性删除和定期删除两种策略,通过两种策略的配合,可以很好地在合理使用cpu时间和避免浪费内存之间取得平衡。

1、惰性删除策略的实现

                 

2、定期删除策略的实现

每当redis服务器的服务器周期性操作serverCron函数执行时,activeExpireCycle函数被调用,分多次遍历服务器

中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。

activeExpireCycle函数的工作模式:

a、函数每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。

b、全局变量current_db会记录当前activeExpireCycle函数检查的进度,并在下一次activeExpireCycle函数调用时,

接着上一次的进度进行处理。

c、随着activeExpireCycle函数的不断执行,服务器中的所有数据库都会被检查一遍,这时函数将current_db变量

重置为0,然后再次开始新一轮的检查工作。                                   


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值