讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis怎样实现全量数据同步_理解主从初次连接时的bgsave与RDB传输流程

大瑶同学_5476

大瑶同学_5476

发布时间:2026-05-06 12:15:59

|

616人浏览过

|

来源于php中文网

原创

Redis主从首次同步必须触发bgsave,因其需提供一致全量快照,而bgsave是唯一不阻塞服务的RDB生成方式;若禁用RDB、磁盘异常或权限不足则失败,导致同步卡住或报错。

redis怎样实现全量数据同步_理解主从初次连接时的bgsave与rdb传输流程

主从初次连接时,Redis 为什么必须触发 bgsave?

因为从节点(slave)在首次同步时无法基于增量复制(replication backlog)——它还没拿到任何命令流,主节点只能提供一个完整、一致的快照。这个快照必须是某个时间点的全量内存状态,而 bgsave 是唯一能在不阻塞主节点服务的前提下生成 RDB 文件的方式。

如果主节点禁用了 RDB(比如只配置了 AOF),或者磁盘写入失败、dir 不可写、dbfilename 路径权限不足,bgsave 就会失败,导致同步卡在 WAIT_BGSAVE_START 或直接报错 Failed to create RDB file。

  • bgsave 失败时,主节点日志里会出现 Failed to save the DB 或 Can't save in background: fork() failed
  • 不要手动提前执行 save:它会阻塞所有客户端命令,且生成的 RDB 不会被复制流程自动识别
  • 检查 info persistence 中的 rdb_bgsave_in_progress 和 rdb_last_save_time,确认 bgsave 是否真正在运行或刚完成

从节点收到 RDB 后,为什么不能边加载边接收命令?

因为 RDB 是静态快照,加载期间从节点数据库处于“重建中”状态,此时若混入主节点发来的增量命令(如 SET、DEL),会导致数据不一致——比如先删 key 再加载 RDB,key 就永远消失了。

所以 Redis 强制要求:RDB 文件传输完后,从节点先清空当前数据库(flushdb),再解析 RDB 加载,整个过程阻塞所有读写(包括 INFO、CLIENT LIST 等管理命令也会被排队)。这阶段从节点状态是 loading,info replication 显示 master_link_status:up 但 slave_repl_offset:0。

redis-tools
redis-tools

按类别查找Redis命令、检测服务器连接、监控键数量和内存占用,支持离线速查表。

下载
  • 大 RDB(>1GB)加载可能耗时几十秒,期间客户端会收到 LOADING Redis is loading the dataset in memory 错误
  • 避免在高峰期发起全量同步;可通过 repl-diskless-sync yes 跳过磁盘,让主节点直接把 RDB 流式传给从节点 socket(但要求网络稳定、带宽充足)
  • 从节点 config set slave-read-only yes 不影响加载期行为——只控制加载完成后是否允许写

repl-diskless-sync 开启后,主节点还调用 bgsave 吗?

仍然调用,但目的变了:bgsave 不再为生成磁盘文件,而是为了 fork 出子进程,把内存数据序列化后直接写进 socket 缓冲区。也就是说,diskless 模式下 bgsave 的输出目标从文件句柄变成了 TCP 连接。

这意味着:即使 dir 不可写、磁盘满,只要 fork 成功、socket 可写,全量同步仍能进行。但它对主节点内存压力更大(需双倍内存暂存序列化数据),且一旦网络中断,整个 RDB 流就废了,得重来。

  • 开启 diskless 需同时设置 repl-diskless-sync yes 和 repl-diskless-sync-delay 5(缓冲几秒,等更多从节点接入,减少重复 fork)
  • 主节点日志中看到 Background saving started by pid XXX for replication,不代表在写文件,要结合 repl-diskless-sync 配置判断
  • 某些云环境(如容器、无盘实例)默认禁用 fork,此时 repl-diskless-sync 也会失败,错误为 Fork operation failed

同步过程中,主节点的 repl-backlog 什么时候开始积累命令?

不是连接一建立就开始,而是在主节点完成 bgsave 并开始发送 RDB 数据的那一刻才启动 backlog 缓冲区。也就是说,RDB 生成和传输阶段产生的写命令,都会被追加进 backlog,供后续从节点断线重连时做增量恢复。

但如果从节点迟迟没连上来(比如网络延迟高、认证慢),而主节点又持续写入,backlog 可能被新命令覆盖旧命令(环形缓冲区特性),导致从节点重连后不得不重新全量同步。

  • 通过 info replication 查看 repl_backlog_active:1、repl_backlog_size 和 repl_backlog_histlen,确认 backlog 是否已启用及剩余空间
  • 默认 repl-backlog-size 是 1MB,对写入频繁的实例远远不够;建议按「峰值写入带宽 × 期望容忍断连时长」估算,例如 10MB/s × 60s = 600MB
  • backlog 不占用 RDB/AOF 文件空间,但属于主节点常驻内存开销,调太大可能挤占其他缓存
RDB 文件本身不包含复制偏移量或校验信息,主从之间靠 repl-offset 和 psync 协议握手匹配进度,这点很容易被忽略——你看到 RDB 成功加载了,不代表后续增量一定跟得上。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4729

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4275

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

8112

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

663

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

776

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

8242

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1180

2024.04.07

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1256

2024.04.07

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn