Redis 同步机制详解

Redis 采用主从复制(Replication)机制来进行数据同步,同时在 Redis Cluster(集群模式)下也使用 Gossip 协议进行节点间数据同步和状态传播。主要的同步方式包括全量同步和增量同步。

1. Redis 主从同步机制(Replication)

Redis 通过主从复制(Master-Slave Replication)保证数据一致性,支持多个从节点(Slave)复制一个主节点(Master)的数据。

1.1 同步方式

Redis 的主从同步主要分为全量同步(Full Synchronization)和增量同步(Partial Synchronization):

同步方式触发时机执行过程性能影响
全量同步(Full Sync)Slave 第一次连接 Master 或数据丢失时Master 生成 RDB 并发送给 Slave,Slave 加载 RDB 并应用数据开销大,影响 Master 性能
增量同步(Partial Sync)Slave 断线后短时间内重连 MasterMaster 仅发送最近的写操作(基于 Replication Backlog)开销小,适用于短时间断连

2. Redis 全量同步过程

全量同步通常发生在:

  • Slave 第一次连接 Master
  • Slave 复制偏移量(offset)落后太多,无法进行增量同步
  • 手动执行 SLAVEOF 命令

执行过程如下:

  1. Slave 发送 PSYNC 请求:当从节点(Slave)启动时,会向主节点(Master)发送 PSYNC ? -1(初次连接)。
  2. Master 触发 RDB 快照:Master 执行 bgsave 生成 RDB 快照文件,并存储当前缓存的写命令(repl backlog)。
  3. Master 发送 RDB 快照给 Slave
    • RDB 通过 socket 传输到 Slave
    • Slave 加载 RDB 快照到内存
  4. Master 发送 backlog 中的增量命令:发送在 bgsave 过程中积累的写命令,以保证 Slave 数据完整。
  5. Slave 继续复制 Master 的写入操作:之后 Master 产生的数据变更都会实时同步到 Slave。

在这里插入图片描述

3. Redis 增量同步过程

增量同步一般用于短暂断连后重连,Redis 通过复制积压缓冲区(Replication Backlog)记录增量数据。

执行过程如下:

  1. Slave 重新连接 Master:Slave 发送 PSYNC 请求,告知 Master 其最新的 offset。
  2. Master 检查 Replication Backlog
    • 如果 offset 在 backlog 内 → 直接发送 backlog 里的数据(增量同步)。
    • 如果 offset 不在 backlog 内 → 触发全量同步(Full Sync)。
  3. Slave 应用增量数据:Slave 接收 backlog 数据,并执行 Redis 命令。

优化

  • Replication Backlog 默认 1MB,可调整 repl_backlog_size。
  • 合理配置 backlog 大小,可避免频繁触发全量同步,提高同步效率。

4. Redis Cluster 同步(集群模式)

在 Redis Cluster(分片集群)中,主从复制仍然适用,同时增加了 Gossip 协议进行状态同步。

4.1 Gossip 协议

Redis Cluster 使用 Gossip 协议进行节点状态传播:

  • 每 1 秒,每个节点会随机与其他节点交换数据(心跳包 PING / PONG)。
  • 故障检测:若 50% 以上主节点发现某个 Master 挂掉,则触发故障转移(Failover),将其某个 Slave 提升为 Master。
  • 数据同步:仍然使用主从复制进行数据同步,但不同 slot 由不同主节点管理。

5. Redis 持久化(RDB & AOF)对同步的影响

Redis 通过 RDB(快照)和 AOF(日志)进行持久化,但对主从同步有不同影响:

  • 全量同步时,Master 生成 RDB 并传输给 Slave。
  • AOF 只影响 Master 持久化,不影响主从复制,但 Slave 也可以开启 AOF 以减少数据丢失。

6. 断线恢复机制

如果 Master/Slave 断线后重新连接,Redis 会自动尝试恢复:

  • 短时间断开(offset 在 backlog 内) → 增量同步
  • 长时间断开(offset 超出 backlog) → 全量同步

优化策略

  1. 增大 repl_backlog_size,避免频繁全量同步。
  2. 配置 repl-diskless-sync,减少 RDB 传输对 Master 的影响:
repl-diskless-sync yes

7. Redis 相关配置参数

参数作用默认值
repl-backlog-size复制积压缓冲区大小1MB
repl-timeout复制超时时间(秒)60
repl-diskless-sync是否使用无磁盘同步no
repl-diskless-sync-delay无磁盘同步的延迟时间5

🚀

机制作用适用场景
全量同步(Full Sync)传输整个 RDB 快照Slave 初次连接、长时间断线
增量同步(Partial Sync)仅同步丢失的命令短时间断连恢复
Replication Backlog缓存主节点最近的操作提高增量同步成功率
Gossip 协议Redis Cluster 状态传播Redis 分片集群
  • 主从复制是 Redis 同步的核心机制,分为全量同步(RDB 传输)和增量同步(backlog)。
  • Replication Backlog 记录增量数据,避免 Slave 频繁进行全量同步。
  • Gossip 协议主要用于 Redis Cluster 的故障检测和状态同步。
  • 合理调整 repl_backlog_size 和 repl-diskless-sync 以优化同步性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值