👌redis主从复制的核心原理?

👌redis主从复制的核心原理?

口语化回答

好的,面试官。redis 的主从复制原理主要是,一开始从服务器发送同步命令,主服务器接收到之后,就会生成一个 rdb 的文件,然后传输给从服务器,从服务器接收到之后,立马进行数据的恢复。然后当主服务器再次接收到写命令的时候,会发给从服务器。这个过程是一个异步复制,主服务器不会等待结果。这样就完成了主从复制,主要的核心步骤就是这些,涉及的一个同步的点就是偏移量,主从都会维护一个偏移量的概念。来判断自己复制到哪里了,如果没有达到会继续自动复制。以上

题目解析

算是比较原理的一道题了,低年限的基本不会问到。这道题可以考察到你初始同步,增量同步的一些思想。这个同步机制,在其他场景也是基本适用的,就像是 mysql 的主从复制基本也是如此。

面试得分点

sync 命令,生成 rdb,写命令增量,缓存偏移量

题目详细答案

主从复制概念

Redis支持主从复制模式,其中一台服务器作为主服务器(Master),可以接收写请求;而一个或多个服务器作为从服务器(Slave),只能接收读请求。通过SLAVEOF命令或配置文件中设置slaveof选项,让从服务器复制主服务器的数据。

核心原理

1、发送SYNC命令:从服务器启动后,连接上主服务器发送SYNC命令,请求同步数据。

2、创建RDB文件:主服务器接收到SYNC命令后,在后台执行BGSAVE命令,生成一个RDB快照文件,这个文件包含了主服务器当前的数据状态。

3、发送RDB文件:主服务器将生成的RDB文件发送给从服务器,从服务器接收并加载该文件,更新自己的数据状态。

4、异步复制:一旦从服务器加载完RDB文件,主从复制就进入了命令传播阶段。此时,主服务器会将所有接收到的写命令发送给从服务器,确保主从数据的一致性。Redis的主从复制是异步的,这意味着主服务器在发送写命令给从服务器时,不会等待从服务器的响应,从而保证了主服务器的高可用性。

复制偏移量和缓冲区概念

主从服务器都会维护一个复制偏移量(offset),用于记录复制过程中传输的数据量。通过比较主从服务器的复制偏移量,可以判断数据是否一致。

复制积压缓冲区:主服务器维护了一个固定长度的、先进先出(FIFO)的队列作为复制积压缓冲区,用于保存最近一段时间内的写命令。当从服务器重新连接主服务器时,如果复制偏移量在复制积压缓冲区范围内,主服务器可以直接将从断线位置开始的写命令发送给从服务器,实现部分重同步。

这两个概念对于短线重连也产生了极大的影响。

当从节点与主节点的连接断开后,会自动尝试重新连接。如果从节点重新连接主节点时,发现自己的复制偏移量在主节点的复制积压缓冲区范围内,则会进行增量同步。如果复制积压缓冲区中的数据不足以完成同步,则需要重新进行全量同步。

 wechat
天生我才必有用