Redis 主从复制的实现原理是什么?
最后更新:1/12/2026
AI 助手
会员专享功能
只有会员才能使用 AI 生成答案功能。 立即升级
Other Answers (1)
Redis 主从复制的实现原理
Redis主从复制是一种数据同步机制,允许从服务器(Slave)复制主服务器(Master)的数据,实现数据冗余和读写分离。
核心原理
Redis主从复制主要基于以下机制:
- 全量同步:从节点初次连接主节点时进行的完整数据同步
- 增量同步:主节点将写命令传播给从节点进行增量更新
- 复制积压缓冲区:主节点维护的环形缓冲区,用于部分重同步
详细工作流程
1. 建立复制关系
从节点执行 SLAVEOF 命令或配置 replicaof 指令:
redis-cli> SLAVEOF master_ip master_port
2. 同步过程
全量同步(初次连接)
- 从节点保存主节点信息
- 从节点与主节点建立socket连接
- 从节点发送
PSYNC命令请求同步 - 主节点执行
BGSAVE生成RDB文件 - 主节点将RDB文件发送给从节点
- 从节点清空旧数据并载入RDB
- 主节点将缓冲区的写命令发送给从节点
- 从节点执行这些命令保持同步
增量同步(网络中断恢复)
- 主节点维护一个复制积压缓冲区(repl_backlog)
- 从节点保存主节点ID和复制偏移量
- 断线重连后,从节点发送包含偏移量的
PSYNC命令 - 如果偏移量在缓冲区范围内,主节点发送缺失的命令
- 如果不在范围内,触发全量同步
3. 命令传播阶段
同步完成后进入命令传播阶段:
- 主节点每执行一个写命令,就将其发送给从节点
- 从节点接收并执行相同的命令
关键配置参数
repl-backlog-size 1mb # 复制积压缓冲区大小
repl-backlog-ttl 3600 # 缓冲区超时时间(秒)
repl-ping-slave-period 10 # 主节点ping从节点间隔
repl-timeout 60 # 复制超时时间
复制流程图解
主节点(Master) 从节点(Slave)
| |
|<------- SLAVEOF/REPLICAOF --------|
| |
|-------- PSYNC ? (初次: ? -1) ----->|
| |
|<------- FULLRESYNC <runid><offset>|
| |
|--------- RDB文件传输 ------------->|
| |
|----- 缓冲期间的写命令 ------------>|
| |
[正常模式]
| |
|----- 每个写命令传播 -------------->|
| |
注意事项
- Redis复制是异步的,主节点不会等待从节点确认
- 从节点可以接受读请求,默认情况下会返回可能过期的数据
- 可以通过
WAIT命令实现一定程度的同步复制 - Redis 4.0引入PSYNC2,支持故障转移后的部分重同步
Redis的主从复制机制提供了数据冗余和读写分离的能力,是Redis高可用架构的基础。