简述Redis过期策略及内存淘汰机制

Redis的过期策略和内存淘汰机制是其管理内存、确保高效率运行的关键特性。下面分别介绍这两个概念:

Redis的过期策略(Expiration Policies)

Redis允许为存储的键设置一个生存时间(Time To Live, TTL),过了这个时间,键会自动失效并被删除。Redis采用两种主要的过期策略来处理过期的键:

  1. 定期删除(Periodic Expire Check): Redis会定期(默认情况下每隔100毫秒)随机检查一小部分键,看它们是否已经过期。如果某个键过期了,它会被删除。这种策略避免了对所有键进行频繁检查的开销,但是可能会导致一些已过期的键没有立即被删除。

  2. 惰性删除(Lazy Expire): 当客户端尝试访问一个键时,Redis会检查该键是否已过期,如果过期则在操作之前删除该键。这种方式减少了定期检查的系统开销,但是如果一个键从未被访问,它将一直占据内存直到下一次访问时被删除。

  3. 定期删除+惰性删除:定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是每个100ms将所有的key检查一次, 而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没 有删除。于是,惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了? 如果过期了此时就会删除。

采用定期删除 + 惰性删除就没其他问题了么 ?
        不是的,如果定期删除没删除key 。然后你也没即时去请求 key ,也就是说惰性删除也没生效。这样, redis 的内存会越来越高。那么就应该 采用内存淘汰机制

Redis的内存淘汰机制(Eviction Policies)

当Redis的内存使用量接近或达到maxmemory配置限制时,内存淘汰机制会被触发,以腾出空间给新的数据。Redis提供了几种不同的淘汰策略,可以通过maxmemory-policy配置项来选择:

  1. volatile-lru (Least Recently Used): 从带有过期时间设置的键中挑选最近最少使用的键进行删除。

  2. allkeys-lru: 从所有键中挑选最近最少使用的键进行删除,无论是否有过期时间设置。

  3. volatile-ttl: 删除剩余存活时间最短的带有过期时间设置的键。

  4. volatile-random: 随机删除带有过期时间设置的键。

  5. allkeys-random: 随机删除任何键。

  6. noeviction: 当内存满时,不再接受写入操作,并返回错误(默认策略)。不会删除任何已有数据。

选择适合的淘汰策略取决于应用场景对数据一致性和访问模式的具体要求。正确的配置可以帮助优化Redis的性能,确保关键数据得到保留,同时有效管理内存资源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值