Redis主从复制实现原理分析

 更新时间:2025年01月08日 09:23:53   作者:MuseLss  
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指令代替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)能找到丢失的那部分数据,就执行部分重同步,否则全量重同步.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis实现分布式Session管理的机制详解

    Redis实现分布式Session管理的机制详解

    这篇文章主要介绍了Redis实现分布式Session管理的机制详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Redis五种数据结构在JAVA中如何封装使用

    Redis五种数据结构在JAVA中如何封装使用

    本篇博文就针对Redis的五种数据结构以及如何在JAVA中封装使用做一个简单的介绍。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • Redis+threading实现多线程消息队列的使用示例

    Redis+threading实现多线程消息队列的使用示例

    Redis多线程消息队列是一种使用Redis作为存储后端的消息队列实现,它利用Redis的线程并发处理能力来提高消息队列的处理效率,本文主要介绍了Redis+threading实现多线程消息队列的使用示例,感兴趣的可以了解一下
    2023-12-12
  • Redis内存碎片处理实例详解

    Redis内存碎片处理实例详解

    内存碎片是redis服务中分配器分配存储对象内存的时产生的,下面这篇文章主要给大家介绍了关于Redis内存碎片处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • redis5集群如何主动手工切换主从节点命令

    redis5集群如何主动手工切换主从节点命令

    这篇文章主要介绍了redis5集群如何主动手工切换主从节点命令,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Redis 哈希Hash底层数据结构详解

    Redis 哈希Hash底层数据结构详解

    这篇文章主要介绍了Redis 哈希Hash底层数据结构详解的相关资料,需要的朋友可以参考下
    2022-08-08
  • redis底层数据结构之ziplist实现详解

    redis底层数据结构之ziplist实现详解

    这篇文章主要为大家介绍了redis底层数据结构之ziplist实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Redis多种内存淘汰策略及配置技巧分享

    Redis多种内存淘汰策略及配置技巧分享

    本文介绍了 Redis 内存满时的淘汰机制,包括内存淘汰机制的概念,Redis 提供的 8 种淘汰策略(如 noeviction、volatile-lru 等)及其适用场景,还讲解了如何配置淘汰机制,通过合理配置可提高缓存效率和系统性能,需要的朋友可以参考下
    2025-01-01
  • 详解Redis 缓存删除机制(源码解析)

    详解Redis 缓存删除机制(源码解析)

    这篇文章主要介绍了Redis 缓存删除机制(源码解析),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Redis实现唯一计数的3种方法分享

    Redis实现唯一计数的3种方法分享

    这篇文章主要介绍了Redis实现唯一计数的3种方法分享,本文讲解了基于SET、基于 bit、基于 HyperLogLog三种方法,需要的朋友可以参考下
    2015-03-03

最新评论