redis 7无盘复制跳过磁盘,直接通过socket流式传输rdb数据,需同时配置repl-diskless-sync yes、repl-diskless-sync-delay(建议1~3秒)和repl-diskless-load swapdb,并禁用主节点rdb持久化(save "")。

什么是Redis 7的无盘复制(diskless replication)
Redis 7默认仍使用「磁盘中转」方式做主从全量同步:主节点生成 RDB 文件写入磁盘,再发给从节点;而无盘复制跳过磁盘,直接通过 socket 将 RDB 数据流式传输给从节点。它能显著减少 I/O 压力和同步延迟,尤其适合 SSD 性能受限、或磁盘空间紧张但内存/网络充足的场景。
repl-diskless-sync 必须设为 yes 才启用
仅靠 repl-diskless-sync yes 不足以生效,它只是开关,还依赖两个关键参数协同:
-
repl-diskless-sync-delay:单位秒,控制主节点等待更多从节点接入再开始传输的延迟时间(默认5)。设为0表示立即发起,但可能错过后续连接的从节点;设太大则增加首次同步等待——生产环境建议保持默认或调至1~3 -
repl-diskless-load:决定从节点如何加载收到的 RDB 流,可选disabled(禁用无盘)、on-empty-db(仅空库时启用)、swapdb(推荐)。其中swapdb最安全:先将新数据载入临时 DB,校验无误后原子切换,避免加载失败导致从节点不可用
错误配置示例:repl-diskless-sync yes 但 repl-diskless-load disabled → 实际仍走磁盘路径,且日志里不会报错,容易误判成功。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
主节点必须关闭 RDB 持久化或确保 save 规则不触发
无盘复制要求主节点在同步期间不能同时执行 BGSAVE。如果配置了 save 900 1 等规则,且恰好有 key 变更满足条件,主节点会尝试落盘 RDB,与无盘逻辑冲突,导致同步失败或回退到磁盘模式。
- 最稳妥做法:在主节点配置中显式禁用 RDB,即
save ""(注意是空字符串,不是注释掉) - 若必须保留 RDB 备份,请确认
save条件极难触发(例如save 3600 1000000),并监控redis-cli info persistence | grep rdb_bgsave_in_progress是否为0 - AOF 状态不影响无盘复制,但开启 AOF 会增加 fork 开销,间接拖慢同步准备阶段
验证是否真走无盘路径,别只看配置
配置写对 ≠ 实际生效。需结合日志与命令输出交叉验证:
- 主节点日志出现
Starting BGSAVE for DISKLESS SYNC或Syncing with replica后紧接Transfer started→ 成功走无盘 - 从节点执行
info replication,观察master_sync_in_progress:1期间,master_sync_left_bytes应持续下降(流式传输特征),而非卡在固定值后突变 - 用
ss -tnp | grep :6379查看主节点 socket 连接,若传输中看到大量ESTAB状态且 recv-q 非零,说明数据正在流式接收
最容易被忽略的是:当从节点已存在旧数据且 repl-diskless-load 设为 on-empty-db 时,无盘复制会静默退回到磁盘模式——此时 info replication 里看不到任何异常提示,只能查日志确认是否出现 Full resync started, diskless loading enabled 这类明确字样。










