当前位置: 首页 > article >正文

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 以优化同步性能。

http://www.kler.cn/a/566824.html

相关文章:

  • Docker 部署 Spring Cloud 项目:实战指南与经验分享
  • Djiang 5实用指南(八)后台管理系统
  • JSON-to-Excel v2.0.0发布,可以在Excel内部,把JSON转换成Excel格式,嵌套的JSON也能转
  • 5个GitHub热点开源项目!!
  • 【初阶数据结构】链表的柔光之美
  • 主流 AI 芯片配置
  • STM32之时钟树
  • Doris、ClickHouse 和 Flink 这三个技术典型的应用场景
  • 关于Hadoop集群部署打不开webUI界面问题
  • 软件安全性测试类型分享,第三方软件测试机构如何进行安全性测试?
  • 小智聊天机器人应用层头文件application.h解析
  • Django+Vue+数据可视化的网络考试与测评系统(程序+论文+讲解+安装+调试+售后)
  • DeepSeek系列 清华大学-AIGC发展研究3.0版 pdf完整版(附下载)
  • c# 代码规范
  • 【机器学习】K近邻#1基于Scikit-Learn的K近邻分类
  • AWS SDK for Java 1.x 403问题解决方法和原因
  • ngx_conf_file_t
  • 在PyCharm中集成AI编程助手并嵌入本地部署的DeepSeek-R1模型:打造智能开发新体验
  • 使用java jdk生成自定义SSL证书-CA免费证书
  • onlyoffice 服务搭建及配置 - 前端 office 文件预览解决方案