温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Redis缓存为何会突然失效

发布时间:2026-09-15 22:23:51 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

Redis 缓存“突然失效”是一个常见但原因多样的问题,通常可以分为主动失效、被动失效、架构/运维问题三类。下面按常见场景系统说明:


一、键自然过期(最常见)

1. TTL 到期

  • 设置了 EXPIRE / PEXPIRE / SETEX
  • 时间到了,Redis 自动删除
  • 表现:某个 key 在某时刻突然查不到

✅ 排查:

TTL key
  • 返回 -2:已不存在
  • 返回 -1:永不过期
  • 返回数字:还有多少秒过期

二、内存淘汰策略导致“被删”

2. 内存达到 maxmemory

当 Redis 内存达到上限,会按策略淘汰 key:

策略 说明
allkeys-lru 所有 key 按 LRU 淘汰
volatile-lru 只淘汰有过期时间的 key
allkeys-random 随机淘汰
noeviction 不淘汰,写失败

✅ 表现:

  • 明明没过期,却被删
  • 热点 key 突然消失

✅ 排查:

CONFIG GET maxmemory
CONFIG GET maxmemory-policy
INFO memory

三、Redis 重启 / 宕机

3. 未开启持久化

  • Redis 重启
  • 如果:
    • 没开 RDB
    • 没开 AOF
  • 所有缓存直接清空

✅ 排查:

CONFIG GET save
CONFIG GET appendonly

⚠️ 云 Redis 也可能因:

  • 实例重启
  • 规格变更
  • 主从切换

四、主从切换 / 集群问题

4. 主节点挂掉,从节点提升

  • 从节点数据可能:
    • 未完全同步
    • 或被清空
  • 客户端切到新节点 → 缓存“消失”

✅ 常见场景:

  • Redis Cluster
  • 哨兵模式
  • 云 Redis 自动切换

五、key 被误删 / 覆盖

5. 代码或人工操作

  • DEL key
  • FLUSHDB / FLUSHALL
  • SET key 覆盖(无 TTL)

✅ 排查:

  • 是否有人工操作
  • 是否有后台任务

六、大 key / 热 key 问题

6. 大 key 被淘汰或阻塞

  • 大 key 过期时:
    • 阻塞主线程
    • 极端情况触发保护机制

七、客户端问题(看起来像失效)

7. 连接 / 序列化问题

  • Redis 有数据
  • 但客户端:
    • 连错实例
    • 序列化失败
    • 读到了 null

✅ 排查:

  • 直接在 Redis CLI 查
  • 对比客户端结果

八、Redis 7 的“主动过期”机制

  • Redis 会异步批量删除过期 key
  • 某些 key 已逻辑过期,但物理未删
  • 极端情况下,过期行为“看起来不稳定”

九、常见“突然失效”的真实原因 Top 5

  1. TTL 设置太短
  2. 内存满了被 LRU 淘汰
  3. Redis 重启未持久化
  4. 主从切换
  5. 代码逻辑误删 / 覆盖

十、如何避免“突然失效”

✅ 建议:

  • 合理设置 TTL(不要过短)
  • 开启 AOF + RDB
  • 监控内存使用率
  • 使用本地二级缓存
  • 对关键 key 做“防穿透 / 防雪崩”

如果你愿意,可以告诉我:

  • 单机 / 集群 / 云 Redis
  • 是否有 TTL
  • 失效是全部 key 还是个别 key

我可以帮你精准定位原因。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI