主页 > 软件开发  > 

Redis同步机制详解

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 第一次连接 MasterSlave 复制偏移量(offset)落后太多,无法进行增量同步手动执行 SLAVEOF 命令

执行过程如下:

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

3. Redis 增量同步过程

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

执行过程如下:

Slave 重新连接 Master:Slave 发送 PSYNC 请求,告知 Master 其最新的 offset。Master 检查 Replication Backlog: 如果 offset 在 backlog 内 → 直接发送 backlog 里的数据(增量同步)。如果 offset 不在 backlog 内 → 触发全量同步(Full Sync)。 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) → 全量同步

优化策略:

增大 repl_backlog_size,避免频繁全量同步。配置 repl-diskless-sync,减少 RDB 传输对 Master 的影响: repl-diskless-sync yes 7. Redis 相关配置参数 参数作用默认值repl-backlog-size复制积压缓冲区大小1MBrepl-timeout复制超时时间(秒)60repl-diskless-sync是否使用无磁盘同步norepl-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 以优化同步性能。
标签:

Redis同步机制详解由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Redis同步机制详解