Redis源码(十一)——Redis的主从复制


Redis中可以发送SLAVEOF命令让一个服务器A成为另一个服务器B的“slave”,从而去复制B,称A为从服务器(slave),B为主服务器(master)


关于复制,2.8版本以前及以后实现有一些不同,2.8版本以前的复制在断线重连后效率较低,所以我们在这里只分析下2.8版本以后的复制。

复制功能分为同步(sync)和命令传播(command propagate)两个步骤。

 

一、同步的实现


Redis在2.8以后的版本使用PSYNC指令进行同步(旧版使用SYNC)


PSYNC指令具有两种模式:完整重同步(full resync)和部分重同步(partial resync)


1) 完整重同步一般用在第一次复制的时候,通过让主服务器创建并发送RDB文件给从服务器,并向从服务器发送缓冲区内的写命令来实现。

2) 部分重同步一般用于断线重连的复制,当从服务器断线后又重新上线,如果满足一定条件主服务器可以将断线这段时间的写命令发送给从服务器,从而使主从数据库状态保持一致。

 

1. 部分重同步实现


部分重同步的功能主要由以下几个重要的属性组成:1) 服务器运行id(runid);2)部分重同步偏移量(psync_offset);3)主服务器的复制备份(replication backlog)

  

1)服务器运行id

每个Redis服务器都有自己的运行id,运行id会在服务器启动时自动生成,是长度为40的随机16进制字符串。当从服务器对主服务器进行初次复制时,主服务器会将自己的运行id传给从服务器,从服务器会保存这个id。在进行部分重同步的请求时,首先会比较当前连接的主服务器的运行id与之前保存的运行id:若相同则说明,从服务器之前复制的就是这个主服务器,从而可以继续执行部分重同步操作;若不相同则从服务器不能对此主服务器执行部分重同步操作。


2)部分重同步偏移量(psync_offset)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值