Redis复制

       在Redis中,用户可以通过执行slaveof命令或者设置saveof选项让一个服务器去复制另一个服务器,称被复制的服务器称为master,对master执行复制的服务器称为slave。如:

       192.168.0.4:6379>slaveof 192.168.0.3 6379

       那么服务器192.168.0.4:6379称为slave,192.168.0.3 6379称为master。

       进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称为“数据库状态一致”,或者简称“一致”。

旧版复制功能的实现:

(1)同步:当客户端向服务器发送slaveof命令,要求从服务器复制主服务器时,从服务器首先执行同步操作

       a、Slave向Master发送sync命令

       b、master执行bgsave命令生成RDB文件,并将RDB文件发送给slave

       c、master将buf缓冲区里的写命令发送给slave执行,使主从一致。

(2)命令传播

        在同步操作执行完毕后,主从服务器两者的数据库将达到一致,但这种一致并不是一成不变的,每当主服务器执行客户端发送的写命令时,主服务器的数据库就有可能会被修改,并导致主从服务器状态不一致。

       为了让主从服务器再次回到一致状态,主服务器需要对从服务器执行命令传播操作:主服务器会将自己执行的写命令,也即是造成主从服务器不一致的那条命令,发送给从服务器执行,当从服务器执行了相同的写命令之后,主从服务器将再次回到一致状态。

旧版复制功能的缺陷:

       断线重连后,从服务器需要完整的执行SYNC同步命令,将断线前的数据库状态及断线期间主服务器执行的写命令生成的RDB文件完整的复制,效率低下。

新版复制功能的实现:

(1)完整重同步

       完整重同步跟SYNC命令执行步骤基本一样,都是通过让主服务器创建并发送RDB文件,以及向从服务器发送保存在缓冲区中的写命令来进行同步。

(2)部分重同步

      断线重连后,slave给master发送PSYNC命令,master向slave发送自断线后的所有写命令,使主从服务器状态一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值