概念:
在Redis中,全量同步(Full Sync)和增量同步(Incremental Sync)是两种不同的数据同步机制,用于将主节点(Master)的数据复制到从节点(Slave)。
全量同步:
全量同步是指将主节点的整个数据集复制到从节点的过程。当从节点初次连接到主节点或者发生数据丢失等情况时,需要进行全量同步。
全量同步的过程需要传输大量的数据,因此在数据量较大时有一定的性能开销。全量同步也会暂停从节点的服务,直到同步完成。
- 从节点向主节点发送SYNC命令请求进行同步。
- 主节点生成一个RDB快照(快照是Redis的一种持久化方式,即将当前数据集的快照写入磁盘),并将快照文件发送给从节点。
- 从节点接收到快照文件后,会加载快照文件并将其中的数据集恢复到自己的内存中。
- 主节点将从节点在同步开始时到现在所接收到的所有写命令(写命令包括set、del等操作)都记录到 Replication Buffer中,并将这些写命令发送给从节点。
- 从节点接收到写命令后,将其重放到自己的数据集中,使从节点的数据和主节点一致。
- 全量同步完成后,从节点成为主节点的完全复制品,并开始进行增量同步。
增量同步:
增量同步是指在全量同步之后,从节点与主节点之间仅传输增量数据的同步方式。通过增量同步,从节点可以实时地获取主节点的写命令并应用到自己的数据集中,保持与主节点的数据一致性。
- 主节点将发送给从节点的每个写命令都记录到内存中的复制积压缓冲区(Replication backlog)。
- 从节点定期向主节点发送PSYNC命令进行增量同步请求。
- 主节点比对从节点的复制偏移量(Replication offset),如果从节点的复制积压缓冲区中的数据还在,就执行部分复制(Partial Resynchronization),只发送从上次同步以后的写命令给从节点。
- 从节点接收到写命令后,将其重放到自己的数据集中,使从节点的数据保持与主节点一致。
增量同步是实时的,只传输增量数据,因此在网络条件较好的情况下,它的性能开销较小
master如何判断slave节点是不是第一次来做数据同步?
首先看slave的offset,如果为空就直接全局同步,如果不为空就去判断Replication id是否一致,不一致就全局同步,一致就根据offset的位置来同步后边新的数据