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
相关推荐
鱼鳞_16 分钟前
热门八股-Redis
数据库·redis·缓存
这个DBA有点耶24 分钟前
SQL:2023新特性详解:JSON_TABLE、GREATEST/LEAST、QUALIFY 到底怎么用?
数据库·sql·mysql
AOI小白新手上路36 分钟前
江科协15-2 直流电机实验调试总结
数据库·mongodb
小王C语言37 分钟前
MySQL 用户管理:创建用户、给用户授权
数据库·mysql
程序员夏洛1 小时前
Redis 的持久化机制有哪些?
java·数据库·redis
l1t1 小时前
DeepSeek总结的修复pgrust v0.2 #83:generate_series 聚合及其底层的两个成本 - #84
数据库·postgresql
厦门德仔2 小时前
【YiFeiWebApi】易飞ERP与WMS系统接口对接实战:从0到1全流程指南
大数据·数据库
内存漫游2 小时前
Page 到底是什么:数据库如何把一条条记录放进磁盘
数据库
小镇敲码人2 小时前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http