首页 > 编程知识 正文

redis主从复制原理是同步还是异步,redis 数据同步

时间:2023-05-06 11:17:53 阅读:147469 作者:991

1.前言

在redis中,为了保证redis的高可用性,一般构建主从模式这一集群模式。

主从模式可以保证redis的高可用性。 那么,redis如何保证主从服务器的数据完整性? 下面介绍redis主(master )从(slave )同步的原理。

2.初次全量同步

当redis服务器第一次向主服务器发送salveof命令时,redis从站将执行完全同步,如下图所示。

slave服务器向master发送psync命令()此时发送的是psync吗? -1),告诉主站需要同步数据。 master接收到psync命令后,运行BGSAVE命令生成RDB文件的快照。 生成完成后,RDB文件将发送到slave。 slave在接收到文件时加载RDB快照,并将运行BGSAVE时数据库的状态更改为master的状态。 master发送存储在缓冲区中的所有写入命令,并告诉slave slave可以同步执行这些写入命令。3.命令传播

因为slave已经与master同步,所以如果随后的master进行写入(例如,对于简单的set name redis ),master将执行当前命令,然后将当前命令发送到slave执行一次,以实现数据一致性

4.重新复制

当slave断开重新连接时,将进行重新同步,重新同步分为完全同步和部分同步

首先,让我们来看看一些同步的大致流程

当slave断开重新连接时,将向master发送psync命令。 当master接收到psync时,它将返回continue响应,指示slave可以执行部分同步。 master将断开的写入命令发送到slaveslave以执行写入命令。 实际上,slave向master发送psync命令后,master需要通过以下3点来判断是否进行部分同步。

首先,介绍以下三个方面。

运行ID每个redis服务器启动后,将生成运行ID。

执行第一次同步时,master会将自己的ID告诉slave,slave会记录下来,在slave断开并重新连接后,如果发现ID是此master,则尝试进行部分重新同步。 如果当前连接的master和ID不同,将进行完全重新同步。

复制偏移复制偏移包括主复制偏移和从属复制偏移。 第一次同步后,两个数据库的复制偏移相同,然后master执行一次写入命令,master偏移1、master将写入命令传递给slave,slave执行一次,slave

复制积压缓冲区复制积压缓冲区是由主节点管理的固定长度先进先出队列。

当slave发送psync时,它自己的偏移也被发送到master,并且如果缓冲区中仍有slave偏移后的数据,则返回continue以通知slave部分重新同步。

如果缓冲区中没有slave偏移后的数据,将进行完全重新同步。

以上三点加起来,我们还可以总结:

当slave断开重新连接时,将向master发送psync命令。 主服务器首先判断服务器的运行id,如果与自己相同则判断偏移量。 主控器确定自己的偏移是否与slave的偏移匹配。 如果不匹配,master将前往缓冲区确定是否存在slave偏移后的数据。 如果存在,则返回continue响应,指示slave可以执行部分同步。 master将断开的写入命令发送到slaveslave以执行写入命令。5.主从同步最终流程

6.结语

最近公司需要的是建立redis主从集群,用哨兵拦截实现主从切换。 于是我根据《redis设计与实现》整理了redis主从的原理,给自己留下了深刻的印象。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。