概述
Redis 主从复制是一种数据同步机制,它允许一个 Redis 服务器(称为主服务器/Master)将其数据复制到一个或多个 Redis 服务器(称为从服务器/Slave/Replica)。这是 Redis 实现高可用性、可扩展性和数据冗余的核心技术之一。
一、核心作用
- 数据冗余与备份:
- 核心作用:从服务器是主服务器数据的实时热备份。当主服务器数据丢失或损坏时,可以从从服务器恢复,是实现数据持久化的另一种有效方式。
- 读写分离与负载均衡:
- 核心作用:主服务器通常处理写操作和强一致性读操作,而从服务器可以处理大量的读操作。通过将读请求分流到多个从服务器上,可以显著提升系统的整体读吞吐量和并发能力。
- 注意:由于复制是异步的,从服务器上的数据可能存在毫秒级的延迟,适用于对数据一致性要求不非常严格的读场景(如缓存、报表查询)。
- 高可用和故障恢复的基石:
- 核心作用:主从复制是构建Redis Sentinel(哨兵)和Redis Cluster(集群)等高可用架构的基础。当主服务器发生故障时,可以通过哨兵自动将一个从服务器提升为新的主服务器,实现服务快速切换,保证业务的连续性。
- 横向扩展读能力:
- 核心作用:当读请求成为瓶颈时,可以简单地通过添加更多从服务器来线性扩展读性能,而无需升级主服务器硬件。
二、详细工作原理
整个复制过程可以分为三个阶段:连接建立阶段、数据同步阶段、命令传播阶段。
阶段 1:连接建立与配置
- 配置从节点:在从服务器配置文件 (
redis.conf) 中设置replicaof <master-ip> <master-port>或在运行时使用REPLICAOF命令。 - 建立连接:从服务器根据配置,向主服务器发起一个Socket 连接,并发送
PING命令检查通信是否正常。 - 身份验证:如果主服务器设置了
requirepass,从服务器需要发送AUTH命令进行密码验证。 - 端口监听:从服务器还会建立一个复制积压缓冲区监听端口,等待主服务器后续发送数据。
阶段 2:数据同步(全量/部分同步)
这是复制过程中最核心、最复杂的部分。Redis 2.8 之后,使用 PSYNC 命令取代了旧的 SYNC 命令,支持部分重同步,极大地优化了断线重连后的效率。
-
全量同步:
- 触发条件:从服务器是第一次连接主服务器,或者从服务器记录的复制偏移量已经不在主服务器的复制积压缓冲区中。
- 过程:
- 从服务器发送
PSYNC ? -1命令请求全量同步。 - 主服务器执行 命令,在后台生成当前数据的。
- 从服务器发送


