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

Redis的过期策略:

  • 惰性删除:

    • 当用户端访问某个键时,Redis会先检查是否设置了过期时间,并判断是否过期
    • 如果键已经过期,则会将其立即删除

该策略可以最大化节省cpu资源,却对内存不友好。极端情况可能出现大量的过期key没有被再次访问,从而不会被消除,占用大量内存

  • 定期删除

    • Reids会定期(每个一段时间,默认100毫秒)随机检查一部分设置了过期时间的键
    • 定期过期策略通过使用循环遍历的方式,逐个检查键是否过期,并删除已经过期的键

通过调整定期扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得cpu和内存资源达到最优的平衡效果

Redis中同时使用了惰性过期和定期过期两种过期策略

  • 假如Redis当前存放了大量的key,并且都设置了过期时间,如果每隔100毫秒去检查这全部的key,cpu负载会特别高,最后可能出现宕机
  • 因此redis采取定期过期,每个一段时间就随机抽取一i的那个数量的key进行检查和删除
  • 但是,也会出现很多已经过期的key没被删除。这时候,redis采用惰性删除,在获取某个key的时候,redis会检查一下,这个key设置了过期时间并且已经过期了,就会被删除

需要注意的是,如果定期删除漏掉了很多过期的key,然后也没走惰性删除,就会有很多过期的key积在内存中,可能会导致内存溢出,或者业务量太大,内存不够然后就溢出了。为了应对这个问题,reids引入了内存淘汰策略进行优化。

redis的内存淘汰策略:

  • 不淘汰策略:当内存不足以容纳写入数据时,redis将新写入的命令返回错误。这个策略确保数据的完整性,但会导致写入操作失败
  • 最近最少使用:从设置了过期时间的键中选择最少使用的键进行删除。该策略优先删除最久没有被访问的键,保留最常用的键
  • 根据过期时间优先:从设置了过期时间的键中选择剩余时间最短的键进行删除。该策略优先删除剩余时间较短的键,以尽量保留剩余时间更长的键
  • 随机删除:从设置了过期时间的键中随机选择一个键进行删除
  • 全局最近最少使用:从所有键中选择最少使用的键进行删除,无论键是否设置了过期时间,都将参与淘汰
  • 全局随即删除:从所有键中随机选择一个键进行删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

EmilyRose

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

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

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

打赏作者

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

抵扣说明:

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

余额充值