有一天,我在小区楼下吃火锅。这家店平时生意一般,但那天刚好是周五晚上,又赶上短视频平台一个博主探店,一下子全城爆单。
老板急得满头大汗,一边招呼客人,一边对我说了一句特别有“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 重写引发的性能抖动
- 这是一个高频面试陷阱题
BGREWRITEAOF 为什么会导致 Redis 卡顿?
2. 背后发生了什么?
当 Master 执行:BGREWRITEAOF
实际上会:
- fork 子进程
- 子进程重写 AOF
- 主进程还要接请求、写增量缓冲
3. 资源消耗点
结果:
- load 飙升
- 响应时间变长
- 极端情况下短暂停顿
4. 正确姿势
- 不在 Master 上做
- 或放在低峰期
- 或Slave 上重写
问题六:主从结构不要用“图”,用“链表”
1. 很多人画过这种结构
看着很美,对吧?但这是灾难现场。
2. 为什么“图状结构”不稳定?
- Master 挂了,所有 Slave 同时失联
- 故障切换复杂
- 晋升成本高
3. 推荐结构:单向链表
好处:
- Master 挂了,Slave1 立刻顶上
- 其他节点无需大改
- 复制关系清晰
4. 面试官最爱听的一句话
链式复制结构有利于故障转移和减少主节点压力。
一张面试速记表(建议背)
总结:面试官真正想考你什么?
如果你一路看到这里,我想告诉你一句真话:
面试官问 Redis 性能问题,不是想听你背配置项。他真正想知道的是:
- 你有没有生产环境意识
- 你知不知道哪些活该谁干、哪些锅不该 Master 背
就像火锅店一样:让厨师好好炒菜,才是系统稳定的第一原则。
END
如果你觉得这篇文章对你有帮助,欢迎点个**「在看」,下次我继续用故事,陪你把那些看起来很硬的面试题,一个个嚼碎。**
我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!