Redis 主从复制的实现原理是什么?

最后更新:1/12/2026

AI 助手

会员专享功能

只有会员才能使用 AI 生成答案功能。 立即升级

Other Answers (1)

Redis 主从复制的实现原理

Redis主从复制是一种数据同步机制,允许从服务器(Slave)复制主服务器(Master)的数据,实现数据冗余和读写分离。

核心原理

Redis主从复制主要基于以下机制:

  1. 全量同步:从节点初次连接主节点时进行的完整数据同步
  2. 增量同步:主节点将写命令传播给从节点进行增量更新
  3. 复制积压缓冲区:主节点维护的环形缓冲区,用于部分重同步

详细工作流程

1. 建立复制关系

从节点执行 SLAVEOF 命令或配置 replicaof 指令:

bash
redis-cli> SLAVEOF master_ip master_port

2. 同步过程

全量同步(初次连接)

  1. 从节点保存主节点信息
  2. 从节点与主节点建立socket连接
  3. 从节点发送PSYNC命令请求同步
  4. 主节点执行BGSAVE生成RDB文件
  5. 主节点将RDB文件发送给从节点
  6. 从节点清空旧数据并载入RDB
  7. 主节点将缓冲区的写命令发送给从节点
  8. 从节点执行这些命令保持同步

增量同步(网络中断恢复)

  1. 主节点维护一个复制积压缓冲区(repl_backlog)
  2. 从节点保存主节点ID和复制偏移量
  3. 断线重连后,从节点发送包含偏移量的PSYNC命令
  4. 如果偏移量在缓冲区范围内,主节点发送缺失的命令
  5. 如果不在范围内,触发全量同步

3. 命令传播阶段

同步完成后进入命令传播阶段:

  • 主节点每执行一个写命令,就将其发送给从节点
  • 从节点接收并执行相同的命令

关键配置参数

tap
repl-backlog-size 1mb      # 复制积压缓冲区大小
repl-backlog-ttl 3600      # 缓冲区超时时间(秒)
repl-ping-slave-period 10  # 主节点ping从节点间隔
repl-timeout 60            # 复制超时时间

复制流程图解

gherkin
主节点(Master)                      从节点(Slave)
     |                                   |
     |<------- SLAVEOF/REPLICAOF --------|
     |                                   |
     |-------- PSYNC ? (初次: ? -1) ----->|
     |                                   |
     |<------- FULLRESYNC <runid><offset>|
     |                                   |
     |--------- RDB文件传输 ------------->|
     |                                   |
     |----- 缓冲期间的写命令 ------------>|
     |                                   |
[正常模式]
     |                                   |
     |----- 每个写命令传播 -------------->|
     |                                   |

注意事项

  1. Redis复制是异步的,主节点不会等待从节点确认
  2. 从节点可以接受读请求,默认情况下会返回可能过期的数据
  3. 可以通过WAIT命令实现一定程度的同步复制
  4. Redis 4.0引入PSYNC2,支持故障转移后的部分重同步

Redis的主从复制机制提供了数据冗余和读写分离的能力,是Redis高可用架构的基础。