Redis内存爆了怎么办?三步搞定缓存治理

发布时间:2026-07-21 浏览:1

一个做SaaS的客户找到我们,说他们的Redis实例每隔三五天就要手动重启一次,不然就会触发OOM导致缓存雪崩。运维同学很无奈:明明设了maxmemory,也配了淘汰策略,怎么还是会爆?

误区:设了淘汰策略就万事大吉

这是最常见的认知偏差。Redis的淘汰策略确实能在内存满时自动删除key,但它有前提——你得确保所有写入的key都带了合理的过期时间。这位客户的Redis里有大量未设置TTL的key,是开发图省事直接set进去的。这些key永远不会过期,淘汰策略再强也无济于事。

另一个坑是bigkey。有人把一个10MB的JSON序列化后塞进一个key里,删除时Redis会阻塞,主从同步也会受影响。用redis-cli的--bigkeys参数扫一遍,能快速发现这类隐患。

正确做法:三步治理Redis内存

第一步,清理存量。写脚本扫描所有未设置TTL的key,按业务判断是否需要补过期时间。量大的时候别用KEYS命令,用SCAN分批扫,避免阻塞。我们帮那个客户清理了12万个无TTL的key,内存占用直接降了40%。

第二步,建立写入规范。团队约定:任何写入Redis的代码必须带过期时间,Code Review时重点检查。不给TTL的写入,一票否决。同时限制单个key的最大value大小,建议不超过10KB,超过的拆分存储。

第三步,配置监控告警。在Redis内存使用达到70%时告警,80%时紧急通知。别等满了才处理。监控指标除了used_memory,还要关注used_memory_rss,如果RSS远大于used_memory,说明碎片率偏高,需要考虑开启activedefrag或重启整理。

把这三步做扎实,Redis的稳定性会有质的提升。缓存治理不是一次性的活,而是持续的工程实践。

相关推荐

电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询

×