主从复制大量占用带宽的主因是RDB快照全量传输、每秒REPLCONF ACK心跳及未压缩的原始命令流;启用repl-diskless-sync可减少磁盘IO和瞬时峰值,rdbcompression仅压缩RDB不压缩命令流,需配合client-output-buffer-limit防止单点缓冲积压。

为什么主从复制会吃掉大量带宽?
主从复制本身不压缩数据,所有写命令、RDB快照、AOF重写输出都以原始字节流传输。当主节点每秒写入 50MB 数据,又配了 3 个从节点,网络出口就可能被占满——这不是异常,是默认行为。
启用 repl-diskless-sync 减少磁盘 IO 和瞬时带宽峰值
传统全量同步先 BGSAVE 写 RDB 到磁盘,再发给从节点,中间两次读盘 + 一次网络发送;无盘复制则让主节点直接把 RDB 流通过 socket 发送给从节点,跳过磁盘落盘环节。
- 必须主从都运行 Redis 2.8+,且从节点配置
repl-diskless-load yes - 主节点开启:
repl-diskless-sync yes(默认no) - 注意:如果网络不稳定或从节点接收慢,可能导致主节点连接阻塞,建议搭配
repl-diskless-sync-delay 5(延迟 5 秒启动传输,攒一批连接再发) - 对万兆内网友好,但跨机房高延迟链路慎用,容易超时断连
用 rdbcompression 和 rdbchecksum 控制传输体积
RDB 文件默认启用 LZF 压缩,但部分旧版本或手动编译时可能关闭;同时校验和会增加约 1% 体积,但在高丢包环境中能避免静默损坏。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 确认开启:
config set rdbcompression yes(检查CONFIG GET rdbcompression) - 校验和建议保留:
config set rdbchecksum yes,禁用后无法验证 RDB 完整性 - 注意:压缩只作用于 RDB 快照,不影响复制缓冲区里的命令流(那是纯文本协议)
限制单个从节点的输出缓冲区,防止单点拖垮主节点
当某个从节点卡住(比如 CPU 过载、网络抖动),主节点会持续堆积它的复制缓冲区,最终吃光内存或触发 client-output-buffer-limit 驱逐。
- 关键配置(主节点 redis.conf):
client-output-buffer-limit slave 512mb 256mb 60 - 含义:硬限制 512MB,达到即断连;软限制 256MB 持续 60 秒也断连
- 不要设成
0或极大值(如4gb),否则可能掩盖真实问题,导致 OOM - 配合监控
INFO replication中的slave0:...output_buffer_length字段,及时发现异常增长
真正卡住的地方往往不是“要不要开压缩”,而是某台从节点悄悄积压了几 GB 缓冲却没人看 INFO replication 输出——延迟从来不是突然发生的,是日志里早有迹可循的 quietly growing buffer。

















