一、复制
1.1 旧版复制功能的实现(Redis 2.8 以前)
命令传播:
主服务器会将自己执行的写命令,也即是造成主从服务器不一致的那条写命令,发送给从服务器执行,让两者再次回到一致状态。
1.2 旧版复制功能的缺陷
即旧版断线后的复制还是使用SYNC命令,相当于重新进行复制,而没有利用从服务器中已有的数据。
1.3 新版复制功能的实现
PSYNC 命令解决了旧版复制功能中断线重连的低效情况,当主服务器同意进行部分重同步后会给从服务器发送continue消息。
1.4 部分重同步的实现
1.4.1 复制偏移量
1.4.2 复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度先进先出(FIFO)队列,默认大小为1MB(可改)。
当主服务器进行命令传播时,它不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区。
1.4.3 服务器运行ID
除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID。
1.5 复制的步骤
1.6 心跳检测
检测主从服务器的网络连接状态:
辅助实现min-slaves配置选项:
检查命令丢失: