Redis 数据过期后的删除策略是什么?

Redis过期键删除策略(面试结构化)

Redis设置key过期时间,key到期不会立刻删除,采用惰性删除 + 定期删除 两种策略配合;另外还有内存满了触发的内存淘汰策略。

1. 惰性删除

  • 逻辑:key过期不会马上删掉,只有当客户端去访问这个key的时候,Redis才检查是否过期,如果过期直接删除,返回nil。
  • 优点:CPU开销很小,只在访问时做检查,不占用额外CPU。
  • 缺点:如果一个key已经过期,但一直没人访问,它会一直占着内存,造成内存泄漏。

2. 定期删除

  • 逻辑:Redis后台每隔一段时间,随机抽取一部分设置了过期时间的key,检查是否过期,过期就删掉。

不是扫描全部key,是随机抽样,避免遍历全部key阻塞主线程。

  • 配置:控制执行频率、抽样数量。
  • 优点:解决惰性删除的问题,把过期key逐步清理释放内存。
  • 缺点:不可能把所有过期key全部清理干净,依然会残留部分过期key在内存。

小结:惰性删除+定期删除组合,依然会有过期key残留在内存。当内存达到上限,就触发内存淘汰策略。

3. 内存淘汰策略 maxmemory‑policy

当Redis内存占用达到maxmemory最大内存限制,执行淘汰,一共8种:

  1. volatile‑lru:从设置过期时间的key,淘汰最近最少使用的(LRU)
  2. allkeys‑lru:全部key,淘汰最近最少使用(最常用)
  3. volatile‑lfu:过期key中,淘汰访问频次最低
  4. allkeys‑lfu:全部key中,淘汰访问频次最低
  5. volatile‑random:在带过期的key随机删
  6. allkeys‑random:所有key随机删除
  7. volatile‑ttl:删除快要过期的key,TTL最小优先
  8. no‑eviction:不删除任何key,直接返回报错(默认不是这个)

Redis的LRU、LFU不是严格算法,是近似采样算法,性能更高。

面试高频追问区分

  • 过期删除:惰性 + 定期,处理已经TTL到期的key。
  • 内存淘汰:内存打满才触发,不管key有没有过期。

总结

  1. 惰性删除:访问的时候才删过期key,节省CPU,但内存可能浪费。
  2. 定期删除:后台随机抽样清理过期key,不能清理全部。
  3. 两者结合仍有残留,内存超限触发内存淘汰策略释放内存。
  4. 线上一般设置maxmemory,搭配allkeys‑lru。
相关推荐
姜鱼问生7 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
IvorySQL8 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔8 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用8 小时前
Spring对IoC的实现
数据库·spring
禾小西10 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
hz5678910 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC11 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday11 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码11 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
小米里的大麦11 小时前
16 MySQL 事务
数据库·mysql