Redis从2.8版本开始,使用PSYNC代替SYNC命令来执行复制时的同步操作,PSYNC有完整重同步与部分重同步两种模式:
- 完整同步模式用于处理初次复制情况:通过让主服务器创建并发送RDB文件,及向从服务器发送保存在缓冲区里面的写命令来进行同步(也叫命令传播)。
- 部分重同步用于处理断线后重复制情况:主服务器从主从服务器连接断开期间执行的写命令发送给从服务器,让从服务器可以更新至主服务器当前所处的状态。
其中,部分重同步功能由下面三部分构成:
- 主从服务器的复制偏移量。通过复制偏移量可以知道主从服务器是否处于一致状态。
- 主服务器的复制积压缓冲区。主服务器在进行命令传播时会将命令写入复制积压缓冲区,且缓冲区里的命令都有对应的复制偏移量。当主从重连上时会根据偏移量比对来确定重传的位置。
- 主从服务器的运行ID。主从服务器都会有自己的运行ID,在每次同步过程中都会将自己的运行ID发送给对方,以此来判断对方的身份。
最后,再简单列一下复制的实现过程:
- 从服务器记录主服务器的地址与端口。从服务器收到客户端的SLAVEOF命令后会先记录主服务器的地址与端口。
- 建立连接。
- 从服务器向主服务器发送PING命令。如果主服务正常收到命令会响应PONG命令。
- 从服务器进行身份验证。
- 从服务器发送端口命令。
- 同步。
- 命令传播。
相关文章:redis主从复制原理
本文参考的有:
黄健宏的《Redis设计与实现》一书
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。