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
相关推荐
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
哈__3 小时前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
hweiyu003 小时前
Redis命令:MSETNX
redis·缓存
IvorySQL4 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
CNSSIRD数据库5 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
wdfk_prog5 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
fd32006 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
华章酱6 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读
浅念-6 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
updayday8547 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器