一、复制SYNC与PSYNC
在Redis主从架构中,主要有以下两种情形需要进行数据同步
(1)当新的服务器执行slave of 命令,成为主服务器的从服务器。这时候从服务器会向主服务器发送SYNC命令,请求全量同步数据,主服务器会进行以下操作
-
执行BGSAVE命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令
-
主服务器将BGSAVE命令生成RDB文件发送给从服务器,从服务器接收并载入这个RDB文件
-
主服务器将记录在缓冲区里面的所有写命令发送给从服务器。从服务器执行这些写命令
(2)当从服务器与主服务器断开连接一段时间后恢复,从服务器需要部分同步从断开连接到重新连接期间主服务器写入的数据,这时候从服务器会向主服务器发送PSYNC命令
部分重同步功能由以下三个部分构成 -
主服务器的复制偏移量和从服务器的复制偏移量
-
主服务器的复制积压缓冲区
-
服务器的运行ID
当从服务器断线重连,会比较自身的复制偏移量和主服务器的复制偏移量,并从复制积压缓冲区取出gap数据,同步给从服务器