Redis主从复制的工作原理是:
- Master和 slave 之间建立 TCP长连接。
- Master服务器负责将修改过的数据同步给slaves。
- 当slave连接到master后,master会将当前数据库快照同步给slave,slave将快照恢复为当前数据。
- 之后master每次有数据修改时,会将修改命令发送给slave。
- Slave重新执行收到的修改命令,保持数据与master一致。
主从复制的具体过程:
1) Slave向Master发起连接和replication request。
2) Master接收到请求后,会将当前数据库的快照 dump 给Slave。
3) Slave接收快照数据,加载到内存并应用。此时Slave的数据与Master同步。
4) Master此后每次有数据修改时(写操作),都会将写命令通过嵌入的Replication Protocol在通道上传给所有连接的Slave。
5) Slave接收到命令后直接执行,使得自身数据保持实时一致。
6) Master产生写操作的顺序被保证传递给所有Slave,从而实现数据的强一致性。
代价主要有:
- Master的写性能受影响
- Slave需要一定时间重新同步Master
但主从复制可以为Redis提供:
- 读写分离、提高负载能力
- 数据冗余、实现高可用性
- Slave可以做备份复制Master