Redis主从同步原理

Stella981
• 阅读 368

Reids复制数据主要有2种场景: 1. 从服务器从来第一次和当前主服务器连接,即初次复制 2. 从服务器断线后重新和之前连接的主服务器恢复连接,即断线后重复制 对于初次复制来说使用SYNC命令进行全量复制是合适高效的,但是对于断线后重复制来说效率就不太能接受了。举例来说: Redis主从同步原理 如图所示,Master在断开连接期间只传播了3个写入命令,但是重新连接之后却要全量复制,显然这是低效并且不太必要的。

PSYNC概念

  为了应对这种情况,Redis在2.8版本提供了PSYNC命令来带代替SYNC命令,为Redis主从复制提供了部分复制的能力。PSYNC命令格式是:

PSYNC <runid> <offset>
runid:主服务器ID
offset:从服务器最后接收命令的偏移量
  • 1
  • 2
  • 3

  PSYNC执行过程中比较重要的概念有3个:runid、offset(复制偏移量)以及复制积压缓冲区。

runid

  每个Redis服务器都会有一个表明自己身份的ID。在PSYNC中发送的这个ID是指之前连接的Master的ID,如果没保存这个ID,PSYNC的命令会使用”PSYNC ? -1” 这种形式发送给Master,表示需要全量复制。

offset(复制偏移量)

  在主从复制的Master和Slave双方都会各自维持一个offset。Master成功发送N个字节的命令后会将Master的offset加上N,Slave在接收到N个字节命令后同样会将Slave的offset增加N。Master和Slave如果状态是一致的那么它的的offset也应该是一致的。

复制积压缓冲区

  复制积压缓冲区是由Master维护的一个固定长度的FIFO队列,它的作用是缓存已经传播出去的命令。当Master进行命令传播时,不仅将命令发送给所有Slave,还会将命令写入到复制积压缓冲区里面。

PSYNC执行过程

  理解了上面三个基本概念,PSYNC的执行过程就好理解了。 Redis主从同步原理 1 客户端向服务器发送SLAVEOF命令,让当前服务器成为Slave; 2 当前服务器根据自己是否保存Master runid来判断是否是第一次复制,如果是第一次同步则跳转到3,否则跳转到4; 3 向Master发送PSYNC ? -1 命令来进行完整同步; 4 向Master发送PSYNC runid offset; 5 Master接收到PSYNC 命令后首先判断runid是否和本机的id一致,如果一致则会再次判断offset偏移量和本机的偏移量相差有没有超过复制积压缓冲区大小,如果没有那么就给Slave发送CONTINUE,此时Slave只需要等待Master传回失去连接期间丢失的命令; 6 如果runid和本机id不一致或者双方offset差距超过了复制积压缓冲区大小,那么就会返回FULLRESYNC runid offset,Slave将runid保存起来,并进行完整同步。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Peter20 Peter20
3年前
redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令;主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;从服务器收到
Stella981 Stella981
3年前
Redis主从自动切换原理
Redis主从自动切换原理复制原理1:当一个从数据库启动时,会向主数据库发送sync命令,2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。4:从数据库
Wesley13 Wesley13
3年前
mysql主从复制原理
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。mysql主(称master)从(称slave)复制的原理:1、master将数据改变记录到二进制日志(binarylog
Stella981 Stella981
3年前
Linux Centos下MySQL主从Replication同步配置(一主一从)
MySQL主从复制概念MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 !(https://img2018.cnblogs.c
Stella981 Stella981
3年前
Chapter 16 Replication(MySQL 5.7)
Chapter16Replication复制允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。默认情况下复制是异步的;从服务器不需要永久连接就可以从主服务器接收更新。根据配置,您可以复制所有数据库、选定的数据库,甚至是选定的表。复制的优点包括:
Stella981 Stella981
3年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Wesley13 Wesley13
3年前
mysql数据库备份之主从同步配置
主从同步意义?主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据
如何在断线后不重连加入音视频房间
RTC房间断网后,默认是一直尝试重连的,例如当主播再次联网重连成功后,会自动发布之前在发布的音视频流。针对某些不想断网后重新加入连接的场景,需要如下配置:1、配置断开后不去重连(这种情况也会重连4次约40s,之后不再重连):RCRTCConfigconfi