Redis过期策略

Redis过期策略

 Redis所有的数据结构都可以设置过期时间,时间一到就会被自动删除。

1.过期的key集合

 Redis会将设置了过期时间的key放入一个独立的字典中,称为过期字典,与没有时间限制的key区分开来,后面会定时遍历这个独立字典来删除到期的key。

 除了定时遍历之外,它还会使用惰性策略来删除过期的key。

2.定时删除策略

 Redis默认每秒进行10次过期扫描,过期扫描不会遍历过期字典中所有的key,而是采用一种简单的贪心策略,步骤如下:

 (1)从过期字典中随机选出20个key
 (2)删除这20个key中已经过期的key
 (3)如果过期的key的比例超过1/4,那就重复步骤(1)

 为了保证过期扫描不会出现循环过度,导致线程卡死的现象,算法还增加了扫描时间的上限,默认不会超过25ms

 显然,当一个大型的Redis实例中所有的key在同一时间过期了,按上述策略进行删除必然会进行长时间的循环,从而使得线上读写可能出现卡顿。

 所以在设置过期时间的时候要注意当存在大批量的key会在同一时间过期时要尽量错开它们,设置一个随机时间范围,然后设置过期时间的时候都从这个随机范围取

3.惰性策略

 惰性策略就是在客户端访问这个key的时候,Redis对key的过期时间进行检查,如果过期了就立即删除。

4.从节点的过期策略

 从节点不会进行过期扫描,从节点对过期的处理是被动的。

 主节点在key到期时,会从AOF文件里增加一条del指令,同步到所有的从节点,从节点通过执行这条del指令来删除过期的key。

 因为指令同步是异步进行的,所以如果主节点过期的key的del指令没有及时同步到从节点的话,就会出现主从数据的不一致,主节点没有的数据在从节点里还存在。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

loser与你

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

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

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

打赏作者

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

抵扣说明:

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

余额充值