Redis内存暴涨导致服务雪崩的问题解决

 更新时间:2026年07月14日 08:29:40   作者:前端Baymax  
线上Redis节点内存使用率从45%飙升至95%,引发服务雪崩,经排查发现,新上线的用户session缓存功能未设置TTL,本文就来详细的介绍一下解决方法,感兴趣的可以了解一下

问题现象

线上突然收到一连串告警:

  • Redis Cluster 某节点内存使用率从 45% 飙到 95%
  • 多个核心服务的 Redis 请求大量超时(P99 从 5ms → 3000ms+)
  • 用户侧反馈"页面打不开"、“登录失败”

排查过程

步骤操作发现
1redis-cli INFO memoryused_memory_rss 从 12GB 跳到了 28GB
2MEMORY STATSvolatile-ttl 类内存占比极低,说明大部分 key 没有设置过期时间
3SLOWLOG GET 100大量 KEYS session 和 HGETALL 大 key 操作
4INFO keyspace某个 db 里 key 数量 8000万+,几乎是上周的 10 倍
5查发布记录3 天前新上线了一个功能,把用户 session 缓存到了 Redis

罪魁祸首浮出水面:新上线的 session 缓存逻辑。

根因

新功能的伪代码:

redis.set("session:" + userId, sessionData)

忘了写 EX(过期时间)。

加上当天正好有一波运营活动流量,短短 3 天积累了近 8000 万个永久有效的 session key。Redis 的 maxmemory-policy 配置的是 noeviction(不淘汰),内存满了之后直接拒绝所有写请求 → 连锁反应导致读也阻塞 → 服务超时 → 雪崩。

一句话总结:忘记设置 TTL 的缓存 = 内存泄露炸弹。

解决方案

止血(5分钟内)

  • Lua 脚本批量扫描 session key,对 idletime > 1800 的 key 执行 UNLINK 异步删除
  • 内存迅速回落至 55%

短期修复(当天)

  • 紧急 hotfix:所有 session 写入加上 EX 3600(1小时 TTL)
  • 临时调大 maxmemory 预留缓冲

长期加固

  1. Redis 使用规范加入 deploy checklist:所有 cache key 必须设置 TTL,否则 CR 拒绝
  2. 新增监控:keyspace 每分钟 key 数量增长率,超过 5%/min 触发告警
  3. maxmemory-policy 从 noeviction 改为 allkeys-lru,极端情况自动淘汰而非拒绝写入
  4. 集成测试增加"无 TTL key 检测"脚本

复盘总结

Redis 的内存问题极少来自一个"超级大 key",更多是"千万个小 key 的沉默堆积"。

三个核心教训:

  1. 缓存的本质是"临时" —— 不设 TTL 的缓存不是缓存,是定时炸弹
  2. 监控要盯增长趋势,而不只是绝对值:80M key 不是一秒爆的,是 3 天慢慢涨上去的,早该发现
  3. maxmemory-policy noeviction 在生产环境极其危险,除非你对每条数据都精确控制了容量,否则请用 allkeys-lru 或 volatile-lru

到此这篇关于Redis内存暴涨导致服务雪崩的问题解决的文章就介绍到这了,更多相关Redis内存暴涨导致雪崩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis分布式锁的超时问题及解决

    Redis分布式锁的超时问题及解决

    这篇文章主要介绍了Redis分布式锁的超时问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Redis Cluster原理及配置详解

    Redis Cluster原理及配置详解

    这篇文章主要为大家介绍了Redis Cluster原理及配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • redis实现延时队列的两种方式(小结)

    redis实现延时队列的两种方式(小结)

    这篇文章主要介绍了redis实现延时队列的两种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Redis缓存与数据库一致性的完整指南

    Redis缓存与数据库一致性的完整指南

    某金融平台因缓存数据不一致导致用户余额错乱,损失千万!文中将用银行对账比喻+实战代码,揭秘6大解决方案,让你的数据毫秒级同步,所以本文给大家详细介绍了Redis缓存与数据库一致性的完整指南,需要的朋友可以参考下
    2025-09-09
  • CentOS 7下安装 redis 3.0.6并配置集群的过程详解

    CentOS 7下安装 redis 3.0.6并配置集群的过程详解

    这篇文章主要给大家介绍了CentOS 7下安装 redis 3.0.6并配置集群的过程,文中通过示例代码和详细的步骤介绍的很相信,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-01-01
  • Redis常用的数据结构及实际应用场景

    Redis常用的数据结构及实际应用场景

    本文介绍了Redis中常用的数据结构,包括字符串、列表、集合、哈希表、有序集合和Bitmap,并详细说明了它们在各种场景下的使用,需要的朋友可以参考下
    2024-05-05
  • Redis在项目中的使用(JedisPool方式)

    Redis在项目中的使用(JedisPool方式)

    项目操作redis是使用的RedisTemplate方式,另外还可以完全使用JedisPool和Jedis来操作redis,本文给大家介绍Redis在项目中的使用,JedisPool方式,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • Redis集群部署模式的不同实现过程

    Redis集群部署模式的不同实现过程

    这篇文章主要介绍了Redis集群部署模式的不同实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Redis哨兵模式的实现

    Redis哨兵模式的实现

    Redis的哨兵模式是一种用于自动监控Redis实例状态并在主服务器出现故障时自动切换到从服务器的机制,本文主要介绍了Redis哨兵模式的实现,感兴趣的可以了解一下
    2024-02-02
  • Redis实现每周热评的项目实践

    Redis实现每周热评的项目实践

    实时统计和展示热门内容是一种常见的需求,本文主要介绍了Redis实现每周热评的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03

最新评论