当前位置: 代码网 > it编程>数据库>Redis > Redis主从复制实现原理分析

Redis主从复制实现原理分析

2025年01月09日 Redis 我要评论
redis主从复制实现原理redis 主节点负责写数据,但也有读的权限,redis的从节点只能读。数据发布到master节点后,master节点再把数据同步到slave节点。实现原理sync阶段(数据

redis主从复制实现原理

redis 主节点负责写数据,但也有读的权限,redis的从节点只能读。

数据发布到master节点后,master节点再把数据同步到slave节点。

实现原理

sync阶段(数据同步)步骤1,2,3,slave启动会发送sync指令给master

command propagate阶段(指令传输)2.1,4 , 5

注意:bgsave不会阻塞线程,master依然可以进行写数据,此时数据会把指令写到缓冲区。

但是,如果是网络抖动等情况,从节点恢复也要走上面这套逻辑,显然太过浪费资源。从redis2.8之后,引入了psync指令代替sync。psync会确定要执行全量同步还是部分同步。

  • 全量同步:从节点第一次和主节点建立连接,就会执行sync+command propagate
  • 部分同步:从节点的复制偏移量无法在复制积压缓冲区中找到

注意:如何知道从节点是第一次连接?

redis在启动的时候会生成一个redis id。

当master节点和slave节点第一次连接时,会把redis启动生成的redis id 发给slave节点,slave节点会对其进行保存。

主从之间发生中断重连的时候,slave节点会把保存redis id发送给master节点。

master节点会判断slave发过来的id和自己当前的redis id是否一致,一样就说明之前连接过,否则就是第一次连接。

psync: 2.8版本后

psync会根据从节点的复制偏移量offset,通过心跳发送给主节点,

根据从节点的复制偏移量在主节点找到丢失的数据,

如果主节点的复制积压缓冲区(默认1m)能找到丢失的那部分数据,就执行部分重同步,否则全量重同步.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com