Redis主从复制的策略是:当主从服务器刚建立连接的时候,进行全量复制;全量复制结束后,进行增量复制。当然,如果有需要,从节点在任何时候都可以发起全量复制。 Redis全量复制一般发生在从节点初始化阶段,这时从节点需要将主节点上的所有数据都复制一份,具体步骤如下:
- 从节点服务器连接到主节点服务器后便开始进行数据同步,从节点发送psync命令(Redis2.8之前是sync命令)。
- 主节点服务器接收到psync命令之后,开始执行bgsave命令生成RDB快照文件并使用缓存区记录此后执行的所有写命令。
- 主节点服务器执行完bgsave命令之后,会向所有从节点发送快照文件,并在发送期间继续在缓冲区内记录被执行的写命令。
- 从节点接收到RDB快照文件后,会将接收到的数据写入磁盘,然后清空所有旧数据,再从本地磁盘载入接收到的快照到内存中。
- 主节点发送完RDB快照文件之后,便开始向从节点发送缓冲区中的写命令。
- 从节点完成快照文件的载入后,开始接收命令请求,执行来自主服务器缓冲区的写命令。
经过以上几步,从节点就完全复制了主节点上的所有数据,以后的数据同步采用的就是增量复制,增量复制的主要过程是主节点每执行一个写命令就会向从节点发送相同的写命令,从节点接收并执行收到的写命令,从而保持主从数据的一致。