面试题答案
一键面试主要阶段及操作
- 握手阶段
- 从服务器向主服务器发送
PSYNC
命令,命令格式可能为PSYNC <run_id> <offset>
。如果是初次同步,<run_id>
为?
,<offset>
为-1
;如果是部分重同步,<run_id>
为主服务器的运行ID,<offset>
为从服务器当前的复制偏移量。 - 主服务器收到
PSYNC
命令后,根据情况判断是初次同步还是部分重同步。如果是初次同步,主服务器会回复FULLRESYNC <run_id> <offset>
,其中<run_id>
是主服务器的运行ID,<offset>
是主服务器当前的复制偏移量;如果是部分重同步,主服务器回复CONTINUE
。
- 从服务器向主服务器发送
- 数据同步阶段
- 全量同步(初次同步):主服务器执行
BGSAVE
命令生成RDB文件,并将RDB文件发送给从服务器。在发送RDB文件期间,主服务器会将新的写命令缓存在缓冲区。从服务器收到RDB文件后,会先清空自己的数据,然后加载RDB文件。加载完成后,主服务器会将缓冲区中缓存的写命令发送给从服务器,从服务器执行这些命令,完成数据同步。 - 部分同步:主服务器根据从服务器发送的偏移量,从自己的复制积压缓冲区中找到从服务器缺失的数据,发送给从服务器。从服务器接收并执行这些数据,完成部分数据的同步。
- 全量同步(初次同步):主服务器执行
- 命令传播阶段
- 数据同步完成后,主从服务器进入命令传播阶段。主服务器会将接收到的写命令发送给从服务器,从服务器接收并执行这些命令,从而保证主从服务器数据的一致性。