用途:
redis的主从复制主要用于做主备,主机可以用作只做写功能,丛机可以用作只做读功能(类似mysql的主从复制一样)。
实现原理:
每一个master都记录一个relication ID ,这是一个伪随机数字符串,同时也记录一个偏移量 offset。master会将自己更新的数据发送给slave,更新多少就发送多少,同时偏移量也会增大。
所以,基本给定一对 relication ID,offset 都会得到唯一的一份数据集。所以slave都拿旧的relication ID和offset去master中获取。通过这样得到最新的数据(这里用master中的offset减去slave中的offset就能够得到对应的slave跟master中没有同步到的数据),然后拿到最新的数据补充到自己原有的数据当中。这个slave去获取的命令就做PSYNC命令。
另外,当slave启动时候 ,只会进行一次全量复制。
实现步骤:
1.slave启动,通过psync命令发送去请求master机获取数据(slave重启会进行一次全量复制)。
2.master机子后台会 启动进程,接收准备所有用户修改的数据,也就是快照rdb。
3.全量复制:master将所有数据都传送给slave。
4. 增量复制:master只将需要修改的数据传送给slave(这是正常情况下,slave没有宕机),增量复制会采用aof形式,发送aof文件给slave。当我们在 master 服务器增减数据的时候,就会触发 replicationFeedSalves()函数,这个函数就会触发更新数据到slave