743 字
4 分钟
Redis 主从复制的完整流程是什么?
  1. 1Redis 系列导读:知识地图、必会主线与复习顺序
  2. 2Redis 中常见的数据类型有哪些?
  3. 3Redis 通常应用于哪些场景?
  4. 4Redis为什么这么快?
  5. 5Redis 常用的过期时间、删除 Key 命令有哪些?
  6. 6Redis 的过期 Key 是如何被删除的?
  7. 7Redis 内存满了怎么办?有哪些淘汰策略?
  8. 8缓存穿透、击穿、雪崩的区别与解决方案
  9. 9Redis 如何保证缓存与数据库的数据一致性?
  10. 10Redis 的持久化机制有哪些?
  11. 11Redis 主从复制的完整流程是什么?本文
  12. 12Redis 的哨兵机制是什么?
  13. 13Redis Cluster 模式与 Sentinel 模式的区别是什么?
  14. 14Redis 支持事务吗?如何实现?
  15. 15Redis 中如何实现分布式锁?
  16. 16Redis 的 Lua 脚本功能是什么?如何使用?
  17. 17如何解决 Redis 中的热点 Key 问题?
  18. 18Redis BigKey 有什么危害?如何发现和治理?
  19. 19为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  20. 20Redis 的 LRU 和 LFU 有什么区别?
  21. 21Redis 数据类型和底层编码有什么区别?
  22. 22Redis 中跳表的实现原理是什么?
  23. 23Redis 的 ZSet 为什么使用跳表,而不是平衡树?
  24. 24Redis 的 RDB 快照如何生成?为什么会有写时复制?
  25. 25Redis 的 AOF 刷盘和重写有什么区别?
  26. 26Redis 断线后如何通过 PSYNC 部分重同步?
  27. 27Redis 主从切换为什么会丢数据?WAIT 能解决吗?
  28. 28Redis 集群会出现脑裂问题吗?
  29. 29Redisson 看门狗(watch dog)机制了解吗?
  30. 30Redis Cluster:哈希槽、Gossip 与故障转移
  31. 31Redis Pipeline 为什么能提高吞吐?能保证原子性吗?
  32. 32Redis 的 SCAN 和 KEYS 有什么区别?
  33. 33Redis 变慢时如何排查?SLOWLOG 能看到所有耗时吗?
  34. 34Redis 和 MySQL 有什么区别?
  35. 35Redis 为什么使用 SDS,而不是 C 字符串?
  36. 36Redis 的哈希表如何处理冲突和渐进式 rehash?
  37. 37Redis Cluster 的 MOVED 和 ASK 重定向有什么区别?
  38. 38Redis Cluster 为什么会报 CROSSSLOT?Hash Tag 怎么用?
  39. 39Redis 如何实现限流?固定窗口和滑动窗口怎么选?
  40. 40Redis Stream 如何保证消息消费?ACK 和 PEL 是什么?
  41. 41Redis 删除数据后为什么内存不下降?如何理解内存碎片?

Redis 主从复制让副本跟随主节点的数据,常用于读扩展与故障转移准备。默认复制是异步的:主节点通常不等待每个副本完成复制就回应客户端,因此它不是强一致性协议,也不是磁盘备份的替代品。

首次同步怎样发生?#

副本通过 REPLICAOF 指定主节点,连接后进行认证、能力协商等步骤,再使用 PSYNC 请求同步。首次复制或无法续传时,需要全量同步:

  1. 主节点为数据集生成一个 RDB 快照,通常由后台进程完成。
  2. 快照生成和传输期间,主节点仍可接收写入,把这段时间的增量修改保留下来。
  3. 副本接收并加载快照,建立快照时刻的数据基础。
  4. 副本接着应用期间的增量命令流,追上主节点,之后持续接收新修改。

RDB 可以通过磁盘文件发送,也可以采用无盘复制直接向副本发送快照。不能一概说复制必须先生成一个落在主节点磁盘上的 RDB 文件。全量复制仍可能带来 fork、网络传输和副本加载的资源压力,应避免故障期间所有副本同时触发大规模同步。

平时如何保持同步?#

主节点将更新数据的操作按复制流发送给副本,副本按顺序应用,并报告复制进度。副本短暂断线后,若复制历史仍可用,可以部分重同步;否则回到全量复制。

副本一般配置为只读,减少与复制内容冲突。直接允许副本写入不会自动把修改反向合并到主节点,本地写入还可能在后续同步中丢失,所以不要把主从复制理解成多主写入。

常见追问#

主节点关闭 RDB 持久化,还能复制吗?#

可以。复制为了同步会使用快照机制,并不要求日常开启 RDB 持久化策略。不过无持久化主节点重启为空后把空数据同步出去存在风险,需要设计启动和故障转移流程。

从副本读取一定最新吗?#

不是。复制延迟可能让刚写入的数据暂时读不到。需要读己之写时可读主节点,或设计可验证的复制进度等待机制。

Sentinel 负责复制数据吗?#

不负责。数据复制由 Redis 主从节点完成;Sentinel 负责监控、故障判断和切主,它也不会把异步复制变成同步提交。

大实例新增副本为什么可能造成抖动?#

全量同步涉及快照、复制缓冲、网络带宽和副本加载。应结合内存余量、复制积压缓冲与同步窗口规划,不能只看平时的 GET 延迟。

Redis 主从复制的完整流程是什么?
https://blog.xqcherry.top/posts/interview/redis/redis-master-replica-synchronization/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0