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

三种过期策略

定时删除

在某个key 设置了过期时间时,创建一个定时器,过期时立即执行对其进行删除的操作
优点:定时删除对内存是最友好的,能够保证内存的key一旦过期就能立即从内存中删除
缺点:对CPU最不友好,在设置过期键比较多的时候,十分消耗CPU资源,影响服务器的响应时间和吞吐量

定期删除

redis默认每秒检查10次,是否有过期的key需要删除。但redis不是每次将所有的key检查一次,而是随机抽取进行检查
优点:可以根据CPU状况自行调整删除时长和频率,有效释放内存
缺点:如果某个键的过期时间已经到了,但是还没执行定期删除,那么就会获取这个键的值,出现业务错误
可以通过修改配置文件redis.conf 的 hz 选项来调整这个每秒检查次数

惰性删除

在你获取某个key的时候,redis会检查一下这个key是否设置了过期时间,是否已经过期,如果过期了就会删除
优点:对 CPU友好,我们只会在使用该键时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查
缺点:如果数据库中有很多使用不到的过期键,这些键便永远不会被删除,内存永远不会释放,从而造成内存泄漏

Redis的过期策略

定期删除+惰性删除
当然,此时仍然无法删除某些永远没有使用的键,于是,我们需要内存淘汰策略

Redis的内存淘汰策略

maxmemory-policy allkeys-lru

1)noeviction:默认设置,当内存不足以容纳新写入数据时,新写入操作会报错。
2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key,推荐使用
3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值