Redis之复制

所谓的复制就是从一台机器复制到另外一台机器上,大部分都是我们经常听到到主从同步。或者从从同步。

同步到命令 slaveof 127.0.0.1

复制分为同步和命令传播

【旧版复制】

当从服务器向主服务器发送slaveof命令的时候主要是通过sync命令来完成的,以下介绍sync的执行步骤:

1、从服务器向主服务器发送sync命令

2、主服务器接收到sync命令后,会启动一个bgsave命令在后台生成一个rdb文件,并开辟一块缓冲区存储生成文件的过程中执行的命令

3、当主服务器生成rdb后,会推给从服务器,从服务器接收并下载。将自己的数据库更新为最新的状态

4、主服务器把记录在缓冲区里的所有命令发送给从服务器,达到数据一致。

命令传播:

即使把rdb文件同步后,仍然无法做到数据完全一致,此时就需要传播命令把新增的同步给从

弊端:

初次复制,没有任何问题,断线后重连,仍需要把rdb重新同步。这就会导致效率非常低。

【新版复制】

为了解决重复复制的低效问题。从2.8开始使用psync来代替sync的同步操作。它支持完整重同步和部分重同步。

部分重同步主要增加了

其实最主要的是在主、从中都增加了复制偏移量。这样主服务器每次发送多少字节,就像自己都的偏移量中加多少。从接收到后在自己的偏移量中也加n.

复制积压缓冲区:

主要是由主服务器维护的一个固定长度先进显出的队列。当主服务器进行命令传播的时候不仅会把命令发送给从服务器,还会把命令写入复制积压队列里。当从服务器重连后,发过来自己的偏移量在队列中,就进行部分重同步操作,相反就需要在完整重同步中操作了。

服务器运行ID:

主、从都会有个这样的id,彼此发给对方。

psync执行的流程图:

主要的命令psync <runid> <offset> ,首次psync ? -1,重连 psync 3bbd8n37n 10086

整个复制实现的步骤:

1、设置主服务器的地址和端口 slaveof  127.0.0.1 6379

2、建立套接字(socket)连接

3、向master发送Ping命令,如果收到pong,说明收发正常。

4、身份验证,如果从设置了对masterauth验证,就需要验证,不需要则不需要验证。

5、向主发送从监控的端口,以便把数据同步发到这个端口上。

6、真正开始同步

7、命令传播(同步)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值