Redis主从复制----底层原理

Redis主从复制

通过Slaceof选项,让一个服务器去复制另外一个服务器,将被复制的服务器为主服务器,而对主服务器进行复制的服务器则被称为从服务器。

SLAVEOF <IP><PORT>

进行复制中的主从服务器双方的数据将会保存相同的数据,称之为数据一致。

数据一致性的实现

SYNC命令(旧版本)

从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令完成。

  1. 从服务器向主服务器发送SYNC命令
  2. 收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令。
  1. 当主服务器的BGSAVE命令执行完毕时,主服务器会将BGSAVE命令生成的RDB文件发送给从服务器,从服务器接收并载入这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令时的数据库状态。
  2. 主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新值至主服务器数据库当前所处的状态。

实时保持数据一致

在主服务器被修改的时候,会对从服务器进行执行命令传播操作:主服务器会将自己执行的写命令,也就是造成主从服务器不一致的那条写命令,发送给从服务器执行,当从服务器执行相同的写命令之后,主从服务器将再次回到一致状态。

旧版复制功能的缺陷

当从服务器掉线重连的时候,主服务器会重新执行一次SYNC命令,会造成很多资源的浪费。

PSYNC命令(新版本)

Redis使用PSYNC命令来实现复制时的同步操作。

PSYN命令有完全同步和部分重同步。

  • 完全重同步:用于处理初次复制的情况:完全重同步的执行步骤和SYNC命令的执行步骤基本一样,都是通过让主服务器创建并发送RDB文件,以及向从服务器发送保存在缓冲区里面的写命令来进行同步。
  • 部分重同步:用于处理断线后复制的情况:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态。

时间

主服务器

从服务器

T0

主从服务器同步完成

主从服务器同步完成

T1

执行并传播命令SET K2 V2

执行主服务器传来的SET k2 v2

.......

.......

........

T1000

主从服务器断开

主从服务器断开

T1001

执行 SET K10086 V10086

断线尝试重连

T1002

执行 SET K10087 V10087

断线尝试重连

T1003

主从服务器重连

主从服务器重连

T1004

向主服务器发送PSYNC命令

T1005

向从服务器返回+CONTINUE回复,表示执行部分重同步

T1006

接收+CONTINUE回复,准备执行部分重同步

T1007

向从服务器发送 K10086 V10086、 K10087 V10087命令

T1008

接收并执行主服务器传来的两个SET命令

T1009

主从服务器再次完成同步

主从服务器再次完成同步

可以明显看出PSYNC命令的部分重同步比SYNC快的多资源也少得多,因为PSYNC的部分重同步只需要将从服务器缺少的写命令发送给从服务器执行就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值