Redis 主从同步是一种用于数据备份和高可用性的机制,它通过将一个 Redis 实例(主节点)的数据复制到其他 Redis 实例(从节点)来实现。在主从同步中,主节点负责处理客户端的写操作,而从节点则负责接收主节点发送的数据更新,并将其应用到自己的数据集中。
主从同步可分为全量同步和增量同步两个阶段。
全量同步 全量同步是在从节点刚刚连接到主节点时进行的一次完整的数据同步过程。当从节点与主节点建立连接后,它会向主节点发送 SYNC 命令,请求进行全量同步。主节点在接收到 SYNC 命令后,开始将自己的整个数据集发送给从节点。
主节点在执行全量同步时,会创建一个 RDB 快照文件,并将该文件通过网络传输给从节点。RDB 快照文件是一个二进制文件,包含了主节点当前的数据集的快照。从节点在接收到 RDB 文件后,会将其加载到自己的内存中,完成数据的全量同步。
全量同步的优点在于能够确保从节点与主节点完全一致的数据集。然而,由于全量同步需要传输整个数据集,对于大规模的数据库来说,可能会占用较长时间和网络带宽。
增量同步 增量同步是在全量同步完成后,从节点与主节点之间进行的持续数据同步过程。在增量同步期间,主节点将自己的写操作追加到一个称为复制积压缓冲区(replication backlog buffer)的缓冲区中。从节点定期向主节点发送 PSYNC 命令,并携带上一次同步时的复制偏移量,请求进行增量同步。
主节点在接收到 PSYNC 命令后,会检查从节点的复制偏移量,并将从该偏移量开始的新写操作发送给从节点。从节点接收到新的写操作后,会将其应用到自己的数据集中。
增量同步的优点在于它是增量的,只传输新增的写操作,而不需要传输整个数据集。这样可以大幅减少网络带宽的使用,并且能够实时保持主节点和从节点之间的数据一致性。
总结起来,Redis 主从同步通过全量同步和增量同步两个阶段,将主节点的数据复制到从节点,实现数据的备份和高可用性。全量同步确保了从节点与主节点拥有相同的数据集,而增量同步则实现了实时的数据更新。通过主从同步机制,即使主节点发生故障,也能够快速切换到从节点,确保系统的持续可用性。同时,主从同步还提供了横向扩展的能力,通过添加更多的从节点,可以提升系统的读取性能和并发处理能力。