repl_backlog原理

本文详细解释了Redis中repl_backlog在master与slave之间同步数据过程中的作用,包括如何记录命令日志和offset,以及在网络阻塞情况下如何处理数据覆盖和同步问题。
摘要由CSDN通过智能技术生成

2.2.3.repl_backlog原理

master怎么知道slave与自己的数据差异在哪里呢?

这就要说到全量同步时的repl_baklog文件了。

这个文件是一个固定大小的数组,只不过数组是环形,也就是说角标到达数组末尾后,会再次从0开始读写,这样数组头部的数据就会被覆盖。

repl_baklog中会记录Redis处理过的命令日志及offset,包括master当前的offset,和slave已经拷贝到的offset:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

slave与master的offset之间的差异,就是salve需要增量拷贝的数据了。

随着不断有数据写入,master的offset逐渐变大,slave也不断的拷贝,追赶master的offset:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直到数组被填满:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此时,如果有新的数据写入,就会覆盖数组中的旧数据。不过,旧的数据只要是绿色的,说明是已经被同步到slave的数据,即便被覆盖了也没什么影响。因为未同步的仅仅是红色部分。

但是,如果slave出现网络阻塞,导致master的offset远远超过了slave的offset:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果master继续写入新数据,其offset就会覆盖旧的数据,直到将slave现在的offset也覆盖:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

棕色框中的红色部分,就是尚未同步,但是却已经被覆盖的数据。此时如果slave恢复,需要同步,却发现自己的offset都没有了,无法完成增量同步了。只能做全量同步。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值