redis 内存淘汰 过期删除 流程

Redis 的内存淘汰策略和过期删除策略是其内存管理的重要组成部分。以下是对这两个策略的描述及其工作流程:

过期删除策略

Redis 使用了一种称为“惰性删除”和“定期删除”相结合的方式管理过期键。

惰性删除

当客户端访问一个键时,Redis 会检查这个键是否设置了过期时间。如果键已过期,Redis 会删除这个键,并返回相应的信息给客户端。这种方式的特点是只有在键被访问时才会检查是否过期,因此称为“惰性删除”。

定期删除

为了避免过期键过多导致内存占用过大,Redis 会使用一个定时任务,在后台异步地遍历各个数据库,检查并删除过期的键。这个定时任务的执行频率可以通过 hz 参数控制,默认是 10 次/秒。

内存淘汰策略

当 Redis 的内存使用超过配置的最大值时,Redis 会根据配置的内存淘汰策略来移除一些键,以释放内存。

以下是 Redis 支持的内存淘汰策略:

  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。这是默认的淘汰策略。
  2. allkeys-lru:移除最近最少使用的 key(LRU,Least Recently Used)。
  3. allkeys-random:随机移除某个 key。
  4. volatile-lru:移除最近最少使用的 key,但仅限于设置了过期时间的 key。
  5. volatile-random:随机移除某个设置了过期时间的 key。
  6. volatile-ttl:移除剩余生存时间(TTL)较短的 key,但仅限于设置了过期时间的 key。
  7. allkeys-lfu:移除最近最不常用的 key(LFU,Least Frequently Used)。
淘汰流程
  1. 当 Redis 需要进行内存淘汰时,它会根据配置的内存淘汰策略选择合适的键进行删除。
  2. 如果选择了 LRU 或 LFU 策略,Redis 会根据键的使用频率或最近使用时间来选择需要删除的键。
  3. 如果选择了随机删除策略,Redis 会随机选择一个键进行删除。
  4. 一旦选定了需要删除的键,Redis 会将其从内存中删除,并释放相应的内存空间。

需要注意的是,内存淘汰是一种紧急措施,应该尽量避免频繁触发。在实际应用中,应该通过合理的数据结构设计、使用合适的持久化策略以及监控和优化 Redis 的内存使用来减少内存淘汰的发生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值