引言
Redis 单节点架构存在明显的单点故障风险。为了解决这个问题,通常需要对 Redis 节点配置从节点,并结合哨兵模式来监听主节点的存活状态。一旦主节点挂掉,从节点能够接管服务继续提供缓存功能。那么,从节点究竟是如何和主节点完成数据传递的呢?这就是 Redis 的主从复制机制。

配置与作用
临时配置
通过 redis-cli 进入 Redis 从节点后,使用以下命令建立连接:
slaveof [masterIP] [masterPort]
永久配置
编辑从节点的配置文件 redis.conf,添加如下配置项:
slaveof [masterIP] [masterPort]
核心作用
- 高可用性:主从配置结合哨兵模式能有效解决单点故障问题,显著提升 Redis 的可用性。
- 读写分离:从节点主要负责读操作,主节点负责写操作。在'读多写少'的场景下,给主节点配置多个从节点可以大幅提升响应效率。
注意:主从复制并不是 Redis 的横向扩展方案,真正的集群模式才是用于水平扩展的架构。
复制过程
整个复制流程大致可以分为以下几个阶段:
- 保存信息:从节点执行
slaveof命令,记录主节点的信息。 - 建立连接:从节点中的定时任务发现主节点信息后,主动建立与主节点的 Socket 连接。
- 通信握手:从节点发送 Ping 信号,主节点返回 Pong,确认双方通信正常。
- 全量同步:连接建立后,主节点将当前所有数据发送给从节点(即数据同步)。
- 持续同步:主节点完成初始数据同步后,会持续将后续的写命令发送给从节点,确保主从数据的一致性。

数据同步机制
在 Redis 2.8 版本之前,使用的是 sync 命令进行同步;2.8 之后则升级为 psync 命令。两者的主要区别在于,sync 仅支持全量复制,而 psync 同时支持全量和部分复制。
在深入同步流程前,我们需要理解几个关键概念:
- runId:每个 Redis 节点启动时都会生成唯一的运行 ID,每次重启后该 ID 也会发生变化。
- offset:主节点和从节点各自维护一个复制偏移量。当主节点有写入命令时,offset 会增加命令的字节长度。从节点收到命令后也会更新自己的 offset 并反馈给主节点。主节点通过对比双方的 offset 来判断数据是否一致。





