Redis 性能问题全解析:90% 的人都把活干错了地方

41 阅读5分钟



有一天,我在小区楼下吃火锅。这家店平时生意一般,但那天刚好是周五晚上,又赶上短视频平台一个博主探店,一下子全城爆单

老板急得满头大汗,一边招呼客人,一边对我说了一句特别有“Redis 味道”的话:“小伙子,不是菜不好,是后厨快被自己累死了。”

我当时一愣。后来越想越觉得这不就是 Redis 在高并发下常见的性能问题吗?

  • Master 又要接请求
  • 又要写日志
  • 又要同步数据
  • 又要重写文件

活全它干,能不崩吗?

今天,我们就把 Redis 当成这家火锅店,用 “后厨模型” ,把社招面试里最常问的:

Redis 常见性能问题和解决方案, 一次性讲透。

先立个整体认知:Redis 性能问题,本质是什么?

我先给你一句面试级总结

Redis 的大多数性能问题,本质都是:“把不该 Master 干的活,全塞给了 Master。”

就像火锅店:

  • Master:总厨 + 收银 + 进货 + 做账
  • Slave:站在旁边看热闹

这能不出事吗?

问题一:Master 最好不要做任何持久化工作

1. 面试官会怎么问?

为什么不建议在 Redis Master 上做 RDB 或 AOF 持久化?

2. 讲故事

继续回到火锅店。Master 就是主厨老王。但老板偏要他干这些事:

  • 每隔一会,把所有菜谱拍照存档(RDB)
  • 每做一道菜,记一笔流水账(AOF)

结果是什么?

  • 厨房里,一边爆炒,一边拍照,一边记账

锅都快糊了。

3. 技术真相

  • RDB(内存快照)
    • 会 fork 子进程
    • 大数据量下,内存页复制成本极高
  • AOF
    • 持续写磁盘
    • 即便是异步,也会消耗 CPU 和 IO

结论: Master 的第一职责是抗并发、低延迟。

4. 正确做法

  • Master:只负责接请求 + 写内存
  • 持久化:交给 Slave

5. 面试级回答模板

为了保证主节点性能稳定,Redis Master 通常不建议开启 RDB 或 AOF 持久化,避免 fork 和磁盘 IO 对请求处理造成影响。

问题二:关键数据由 Slave 开启 AOF,每秒同步一次

1. 火锅店继续升级

老板终于醒悟:“老王,你别记账了,让副厨记。”

于是:

  • 老王(Master):专心炒菜
  • 副厨(Slave):专门记账、备份

2. Redis 的正确配置思路

如果数据很关键:

  • Slave 开启 AOF
  • 同步策略选择:everysec

原因很简单:

3. 示例配置

4. 面试官想听到的关键词

  • “降低 Master 压力”
  • “持久化与性能解耦”
  • “AOF 每秒同步是工程上常见折中方案”

问题三:Slave 和 Master 最好在同一局域网

1. 换个比喻:外卖配送

如果:

  • 主厨在北京
  • 副厨在纽约

你让副厨实时同步菜谱?网络抖一下,锅就翻了。

2. Redis 主从复制的现实

主从复制依赖:

  • 网络稳定性
  • 延迟
  • 带宽

如果跨机房、跨地域:

  • 同步延迟不可控
  • 容易出现复制中断
  • 重连会触发全量同步

3. 结论

Redis 主从节点,最好在同一个局域网或同一可用区。

4. 面试官常追问

那跨机房怎么办?标准回答:

  • Redis 不适合强一致跨地域复制
  • 跨地域更多用于灾备、异地只读

问题四:避免在压力大的 Master 上增加从库

1. 很多人犯的低级错误

线上 QPS 已经很高了,结果有人说:“再加几个 Slave 吧,读压力能分担。”

结果:

Master 要:

  • 给每个 Slave 复制数据
  • 维护复制缓冲区
  • 处理 ACK

压力反而更大。

2. 火锅店版解释

老王已经:

  • 炒 10 口锅
  • 接 50 桌客人

你还让他:“顺便给 3 个新学徒,每道菜都演示一遍。”,不炸才怪。

3. 正确姿势

  • 先评估:CPU、网络、replication buffer
  • 在低峰期加 Slave
  • 或使用读写分离中间层、Proxy

问题五:BGREWRITEAOF 重写引发的性能抖动

  1. 这是一个高频面试陷阱题

BGREWRITEAOF 为什么会导致 Redis 卡顿?

2. 背后发生了什么?

当 Master 执行:BGREWRITEAOF

实际上会:

  1. fork 子进程
  2. 子进程重写 AOF
  3. 主进程还要接请求、写增量缓冲

3. 资源消耗点

结果:

  • load 飙升
  • 响应时间变长
  • 极端情况下短暂停顿

4. 正确姿势

  • 不在 Master 上做
  • 或放在低峰期
  • 或Slave 上重写

问题六:主从结构不要用“图”,用“链表”

1. 很多人画过这种结构

看着很美,对吧?但这是灾难现场

2. 为什么“图状结构”不稳定?

  • Master 挂了,所有 Slave 同时失联
  • 故障切换复杂
  • 晋升成本高

3. 推荐结构:单向链表

好处:

  • Master 挂了,Slave1 立刻顶上
  • 其他节点无需大改
  • 复制关系清晰

4. 面试官最爱听的一句话

链式复制结构有利于故障转移和减少主节点压力。

一张面试速记表(建议背)

总结:面试官真正想考你什么?

如果你一路看到这里,我想告诉你一句真话:

面试官问 Redis 性能问题,不是想听你背配置项。他真正想知道的是:

  • 你有没有生产环境意识
  • 你知不知道哪些活该谁干、哪些锅不该 Master 背

就像火锅店一样:让厨师好好炒菜,才是系统稳定的第一原则。

END

如果你觉得这篇文章对你有帮助,欢迎点个**「在看」,下次我继续用故事,陪你把那些看起来很硬的面试题,一个个嚼碎。**

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!