PSYNC 命令的实现
PSYNC 命令的实现
两种调用方法
PSYNC 命令的调用方法有两种:
如果从服务器没有复制过主服务器,或者执行过 SLAVEOF no one 命令,从服务器在开始一次新的复制时向主服务器发送 PSYNC ?-1 命令,进行完整重同步
如果从服务器已经复制过某个主服务器,从服务器开始新的复制的时候发送 PSYNC runid offset 命令,runid 是上一次复制的主服务器的运行🆔,offset 是从服务器当前的复制偏移量,主服务器根据这两个参数判断进行部分同步复制还是完整重同步复制。
三种回复情况
收到 PSYNC 命令后,主服务向从服务器的回复有三种情况:
如果主服务器返回+FULLRESYNC run🆔 offset 说明进行完整重同步操作,runid 是主服务器的运行🆔,从服务器将这个🆔保存起来,在一次发送 PYSNC 命令时候使用,offset 是主服务器当前的复制偏移量,从服务器将这个值作为自己的初始偏移量。
如果主服务器返回+CONTINUE 回复,表示主服务器与从服务器进行部分重同步,从服务器只要等主服务器将自己的那部分数据发送过来就可以了。
如果主服务器返回-ERR 回复,表示 redis 主服务器的版本可能低于 2.8,识别不了 PSYNC 命令,从服务器会发送 SYNC 命令进行完整同步
总结
这就是 PSYNC 命令的大致实现原理和流程了,了解复制的原理的对我们来说至关重要,深入学习工作原理我们才能在遇到问题的时候不慌不忙,而向从服务器发送 SLAVEOF 命令可以让一个从服务器复制主服务器,那么它的实现原理又是怎样的呢,下篇文章中我们将会介绍一下。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/25558cd3c68748f2d86ba37a6】。文章转载请联系作者。
评论