3.命令传播
slave已经同步过master了,那么如果后续master进行了写操作,比如说一个简单的set name redis,那么master执行过当前命令后,会将当前命令发送给slave执行一遍,达成数据一致性。
4.重新复制
当slave断开重连之后会进行重新同步,重新同步分完全同步和部分同步
首先来看看部分同步大致的走向
实际上当slave发送psync命令给master之后,master还需要根据以下三点判断是否进行部分同步。
先来介绍一下是哪三个方面:
每个redis服务器开启后会生成运行ID。
当进行初次同步时,master会将自己的ID告诉slave,slave会记录下来,当slave断线重连后,发现ID是这个master的就会尝试进行部分重同步。当ID与现在连接的master不一样时会进行完整重同步。
复制偏移量包括master复制偏移量和slave复制偏移量,当初次同步过后两个数据库的复制偏移量相同,之后master执行一次写命令,那么master的偏移量+1,master将写命令给slave,slave执行一次,slave偏移量+1,这样版本就能一致。
复制积压缓冲区是由master维护的固定长度的先进先出的队列。
当slave发送psync,会将自己的偏移量也发送给master,当slave的偏移量之后的数据在缓冲区还存在,就会返回+continue通知slave进行部分重同步。
当slave的偏移量之后的数据不在缓冲区了,就会进行完整重同步。
结合以上三点,我们又可以总结下:
5.主从同步最终流程
6.结语
最近公司需要,我搭建了一套redis主从集群并且用哨兵进行监听实现主从切换。因此我根据《redis设计与实现》梳理了redis主从原理,给自己加深印象。
推荐教程: 《redis教程》