Redis 源码解析 - Redis 主从握手

Redis主从复制机制中的主从握手流程是一个关键步骤,用于建立两者间的通信和数据同步关系。以下是Redis主从握手的源码解析概要:

主从握手流程

  1. 从节点初始化连接:从节点启动后,会主动连接主节点。这个过程通常是通过从节点的配置直接指定主节点的地址(IP和端口),或者通过REPLICAOF命令动态指定。

  2. 发送PSYNC命令:连接建立后,从节点首先向主节点发送PSYNC命令。这个命令携带了从节点的信息,包括复制ID(replication ID)和复制偏移量(replication offset)。

  3. 主节点响应

    • 增量同步:如果从节点提供的复制ID和偏移量有效,且主节点支持增量同步,主节点将回复+CONTINUE,随后开始发送从复制偏移量之后的数据给从节点。
    • 全量同步:如果从节点提供的复制ID无效或偏移量与主节点数据不匹配(如初次复制或复制中断后重新同步),主节点会回复+FULLRESYNC,后面跟着新的复制ID和一个RDB文件的校验和。之后,主节点会启动一个后台进程生成RDB文件,并将其发送给从节点,从节点接收并载入RDB文件以完成全量数据同步。
  4. 握手完成与数据同步:无论增量还是全量同步,从节点在收到数据后,会根据同步的数据更新自己的状态,并开始持续监听主节点,接收后续的写操作命令(通过commandlua脚本产生的写操作),以维持数据的一致性。

关键源码位置

  • replication.c:这个文件是Redis复制功能的主要实现,包含了处理PSYNC命令、主从同步、复制状态机等逻辑。
  • networking.c:虽然不是专门针对复制,但它处理网络连接和命令的收发,是握手过程中的基础。

实现细节

  • 握手协议兼容性:握手过程中,Redis会考虑协议的版本兼容性,确保老版本的从节点也能正确同步。
  • 心跳与断线重连:除了初始的握手,主从之间还会有心跳机制维护连接,一旦连接中断,从节点会尝试重新连接并重新发起握手流程。
  • 异步复制:Redis的复制是异步的,主节点在发送完命令给从节点后不会等待确认,这种设计有利于保持低延迟,但可能会导致短暂的数据不一致。

深入理解Redis主从握手,需关注上述源码文件中的具体实现逻辑,特别是replication.c中的握手处理流程,以及如何根据不同的同步需求选择合适的同步策略。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值