首页 > 数据库 >面试题-Redis的主从同步是如何实现的

面试题-Redis的主从同步是如何实现的

时间:2023-02-01 13:34:13浏览次数:63  
标签:面试题 同步 Slave Redis 节点 命令 复制 全量 主从

Redis的主从同步是如何实现的

Redis的主从复制可以根据是否是全量,分为全量同步和增量同步(也叫全量复制和部分复制)。

  • 全量复制一般用于初次复制的场景
  • 部分复制则用于处理因网络中断等原因造成数据丢失的场景

从2.8版本开始,Redis使用psync命令完成主从数据同步。

psync命令需要以下参数的支持:

  1. 复制偏移量:主节点处理写命令后,会把命令长度做累加记录,从节点在接收到写命令后,也会做累加记录;从节点会每秒钟上报一次自身的复制偏移量给主节点,而主节点则会保存从节点的复制偏移量。
  2. 积压缓冲区:保存在主节点上的一个固定长度的队列,默认大小为1M,当主节点有连接的从节点时被创建;主节点处理写命令时,不但会把命令发送给从节点,还会写入积压缓冲区;缓冲区是先进先出的队列,可以保存最近已复制的数据,用于部分复制和命令丢失的数据补救。
  3. 主节点运行ID:每个Redis节点启动后,都会动态分配一个40位的十六进制字符串作为运行ID;如果使用IP和端口的方式标识主节点,那么主节点重启变更了数据集(RDB/AOF),从节点再基于复制偏移量复制数据将是不安全的,因此当主节点的运行ID变化后,从节点将做全量复制。

全量同步

全量同步发生在slave初始化的阶段,这个阶段slave需要将master上所有的数据都复制到本节点上,全量同步的步骤:

  1. 从节点连接与主节点连接后发送PSYNC命令;
  2. 主节点在接收到PSYNC命令后,执行BGSAVE命令开始生成RDB文件,并通过缓冲区记录在执行了BGSAVE后执行的所有写命令;
  3. 主节点在执行完BGSAVE命令后,向所有的从服务器发送快照文件,并在发送期间持续的记录写命令;
  4. Slave节点在收到快照文件后丢弃所有的旧数据,并载入新收到的快照;
  5. master在发送完快照后,开始向从服务器发送缓冲区中记录的这段时间内的写命令;
  6. 从服务器在载入快照数据完成后,开始接收缓冲区中的命令,并在Slave节点上执行;
  7. 在完成了数据同步后,Slave节点的数据初始化就算完成了,这时候Slave节点就可以开始接收客户端的读请求了

增量同步

增量同步是在Slave节点在初始化数据完成后正常工作期间,Master节点在接收到写请求后同步到从服务器的过程。

增量同步的过程就是Master节点在收到一个写请求后就会向Slave节点同步相同的命令,Slave节点接收并执行写命令。


转载至:

https://blog.csdn.net/weixin_45525272/article/details/126566208

https://www.nowcoder.com/issue/tutorial?tutorialId=94&uuid=d96fa15a169c44e9a94dda690f27da28

标签:面试题,同步,Slave,Redis,节点,命令,复制,全量,主从
From: https://www.cnblogs.com/galo/p/17082231.html

相关文章

  • redisson分布式锁源码和原理浅析
    在redisson之前,很多人可能已经自己实现过基于redis的分布式锁,本身原理也比较简单,redis自身就是一个单线程处理器,具备互斥的特性,通过setNx,exist等命令就可以完成简单的分布式......
  • Redis主从同步分析
    一、Redis主从同步原理1.1Redis主从同步的过程配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的......
  • redis基本数据类型 set类型
      127.0.0.1:6379>SADDs1abc(integer)3127.0.0.1:6379>SMEMBERSs11)"b"2)"c"3)"a"127.0.0.1:6379>SREMs1a(integer)1127.0.0.1:6379>SCARD......
  • 面试题-如何实现Redis的高可用
    如何实现Redis的高可用实现Redis的高可用,主要有哨兵和集群两种方式。哨兵简单的一句话:反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为......
  • redis的五大数据类型
    redis的五大数据类型Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作​​数据库​​​、​​缓存​​​和​​消息中间件MQ​​。它支持多种类型的数据结构,......
  • redis之三种特殊数据类型
    redis之三种特殊数据类型一、Geospatial(地理位置)朋友的定位,附近的人,打车距离计算?Redis的Geo在Redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方......
  • Redis主从复制
    Redis主从复一、概念主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower),​​数据的复制是单向的,只......
  • StringRedisTemplate和RedisTemplate的使用区别
    最近在使用redis的过程中,整合java的时候,用redisTemplate的过程产生一个bug,通过stringRedisTemplate解决了,这里分享下解决过程,仅供参考。RedisTemplate使用的序列类在在操作......
  • 面试题积累_01
    1如何判断一个数是否为奇数?//常规方法boolisOdd_Method1(intn){ if(n%2) returntrue; else returnfalse; }//高效方法boolisOdd_Method2(intn){......
  • delphi FireDAC制作主从表
    需求:窗体上下两个表,上面是主表,下面是从表.当点击主表上的记录时,从表显示出此物料的入仓记录效果如果所示  这里提供两种方案,其中第二种方案是在第一种方......