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。
相关推荐
是程序喵呀20 分钟前
Redis实现持久化
数据库·redis·缓存
余槐i38 分钟前
PostgreSQL 加索引后查询反而更慢:优化器弃用索引的 3 种情形
spring boot·redis·mysql·postgresql·事务
我不会起名字32240 分钟前
Redis 从 0 到 1(十三):分布式锁被误删、锁不住?Go 无 Lua 实现 3 级防御
redis·go·分布式锁·watch·setnx
z06.1 小时前
MySQL存储引擎
数据库·mysql
小徐不徐说1 小时前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
JackLam1 小时前
Gitea HTTPS 反向代理配置
数据库
量子物理学1 小时前
oracle plsql instantclient 安装
数据库·oracle
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
ClickHouseDB9 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906949 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis