Redis过期机制以及淘汰策略

Redis如何删除已过期key

答案是通过定期删除+惰性删除

定期删除

Redis每100ms会在内存中随机选取一部分key进行检查,将已经过期的删除,为什么只随机检查一部分,而不是全部检查呢?那当然是怕数据过大,导致Redis变慢甚至崩掉啊…你想想,假设每100ms扫描几十万数据,redis怕不是直接人没了

惰性删除

看到这,估计你心里会产生问题,如果不能保证key一过期就能被删除,那我岂不是能取到已经过期的key?那设置过期时间还有啥意义?放心,你是取不到过期数据的,因为还有惰性删除这一关等着过期key呢,当你每一次获取key的时候,Redis都会检查该key是否已过期,如果过期了,那就直接删除,不会返回任何东西给你,所以通过这个惰性删除能保证你不会取到过期key

定期删除+惰性删除的问题

定期删除中存活下来一些key,然后你又一直没有去获取或者去操作这些key让他们走惰性删除,那么这些key就会越堆越多,最后把内存都堆满了,这时候咋办呢?这时候就要用到淘汰策略

淘汰策略

淘汰策略都是在redis.conf中下面这一行配置

maxmemory-policy volatile-lru(自选)

有以下淘汰策略提供选择

  • noeviction :当内存不足时写入数据,直接给你报错,这种属于没啥人用的,简直太暴力了,一点也不优雅~
  • allkeys-lru :当内存不足时写入数据,Redis会干掉最近最少使用的key,这个是主流解决方案,精准而优雅~
  • allkeys-random :当内存不足时写入数据,Redis会随机干掉某倒霉key,这是属于把问题抛给上帝,也就比第一个解决方案好一丶丶吧
  • volatile-lru :当内存不足以写入数据时,从过期key中删除最近最少使用的key,据说用这个的也不多,为啥呢?我的理解是重点是先把空间清出来,清理最少用的数据最好,那些过期的key反正也过不了惰性删除这一关
  • volatile-random :当内存不足以写入数据时,从过期key中让上帝选某个删除,一般没人喜欢把问题交给上帝吧
  • volatile-ttl :当内存不足以写入数据时,从过期key中选最早过期的key删除,这个方法我觉得不行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值