本文主要是介绍Redis主从复制实现原理分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率...
Redis主从复制实现原理
Redis 主节点负责写数据,但也有读的权限,redis的从节点只能读。
数据发布到Master节点后,Master节点再把数据同步到slave节点。
实现原理
sync阶段(数据同步)步骤1,2,3,Slave启动会发送sync指令给Master
command propagate阶段(指令传输)2.1,4 , 5
注意:BGSAVE不会阻塞线程,Master依然可以进行写数据,此时数据会把指令写到缓冲区。
但是,如果是网络抖动等情况,从节点恢复也要走上面这套逻辑,显然太过浪费资源。从redis2.8之后,引入了Psync指令代替SyncChina编程。Psync会确定要执行全python量同步还是部分同步。
- 全量同步:从节点第一次和主节点建立连接,就会执行sync+command propagate
- 部分同步:从节点的复制偏移量无法在复制积压缓冲区中找到
注意:如何知道从节点是第一次连接?
Redis在启动的时候会生成一个redis id。
当Master节点和Slave节点第一次连接时,会把redis启动生成的redis id 发给Slave节www.chinasem.cn点,slave节点会对其进行保存。
主从之间发生中断重连的时候,Slave节点会把保存redis id发送给Master节点。
Master节点会判断Slave发过来的id和自己当前的redis id是否一致,一样就说明之前连接过,否则就是第一android次连接。
Psync: 2.8版本后
psync会根据从节点的复制偏移量offset,通过心跳发送给主节点,
根据从节点的复制偏移量在主节点找到丢失的数据,
如果主节点的复制积压缓冲区(默认1M)能找到丢失的那部分数据,就执行部分重同步,否则全量重同步.
总结
这篇关于Redis主从复制实现原理分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!