006 Redis的过期策略有哪些?内存淘汰机制有哪些?

读读Redis的官网,学第一手的资料:Redid官方文档地址

 Redis中国-文档网址:Redis中国-文档地址

或者看看书《Redis 深度历险: 核心原理和应用实践》


1、redis 过期策略是:定期删除+惰性删除


所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基 本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key,那样就是一场性能上的灾难。实际上 redis 是每隔 100ms 随机抽取一些 key 来检查和删除的。

但是问题是,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那咋整呢?所以就是惰性删除 了。这就是说,在你获取某个 key 的时候,redis 会检查一下 ,这个 key 如果设置了过期时间那么是否 过期了?如果过期了此时就会删除,不会给你返回任何东西。 获取 key 的时候,如果此时 key 已经过期,就删除,不会返回任何东西。

但是实际上这还是有问题的,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除, 此时会怎么样?如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整?


2、答案是:走内存淘汰机制。

内存淘汰机制 redis 内存淘汰机制有以下几个:

- noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错, 这个一般没人用吧,实在是太恶心了。

- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中, 移除最近最少使用的 key(这个是最常用的)。

- allkeys-random:当内存不足以容纳新写入数据时, 在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉 啊。

- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使 用的 key(这个一般不太合适)。

- volatile-random:当内存不足以容纳新写入数据时,在设置了过期 时间的键空间中,随机移除某个 key。

- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过 期时间的键空间中,有更早过期时间的 key 优先移除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值