Redis副本如何保持数据更新?主节点新写入数据的同步方式及模式疑问
Redis副本的数据同步机制
一、副本如何初始化并追赶上主节点
- 副本启动后,向主节点发送
PSYNC命令发起同步请求。 - 主节点执行
BGSAVE生成全量RDB快照,同时把这段时间的所有写入命令暂存到复制缓冲区。 - 主节点将RDB文件发送给副本,副本清空自身数据后加载RDB完成全量恢复。
- 主节点再把缓冲区里的增量命令同步给副本,副本执行这些命令后,就完全追赶上主节点的数据状态。
二、追赶上主节点后,新写入的同步方式
当副本和主节点数据完全一致后,主节点会通过主动推送的方式同步新写入:
- 主节点每处理完一个写入命令,会先把命令写入自身的复制积压缓冲区(replication backlog),然后立即推送给所有已建立连接的副本。
- 副本收到命令后立刻执行,以此保持和主节点的数据实时同步。
三、关于推送 vs 轮询的说明
Redis主从同步的核心是主节点主动推送,副本并不会持续轮询获取数据:
- 推送机制能保证新数据几乎无延迟地同步到副本,效率远高于轮询。
- 副本只会定期发送
PING命令给主节点,目的是检测连接是否正常,并非请求数据。只有当主从连接中断后,副本重新连接时,才会通过PSYNC命令,基于复制积压缓冲区的偏移量请求中断期间的增量数据,这属于异常恢复场景的主动请求,正常同步全程是主节点推送。
内容的提问来源于stack exchange,提问作者Ankit Sahay
相关产品推荐
相关产品推荐

