?
?前言Redis 的主从复制和 MySQL 差不多,主要起着 数据备份,读写分离等作用。所以说主从复制对 Redis 来说非常重要,而无论是面试还是工作总,了解 Redis主从复制 底层实现有非常有必要,那么接下来就和大家来看看 Redis 主从复制是怎么实现的吧。
什么是 Redis 主从复制???在 Redis 中,我们可以通过 SLAVEOF 命令或者 slaveof 选项,让一个服务器去复制另一个服务器,被复制的服务器称为“主服务器”,发起复制的服务器称为“从服务器”,由两种服务器组成的模式称为“主从复制”。
?
??Redis 主从复制有以下特点:
假设现在有两个 Redis 服务器,地址分别为 127.0.0.1:6379 和 127.0.0.1:12345,如果在服务器 127.0.0.1:12345 执行以下命令:
127.0.0.1:12345> SLAVEOF 127.0.0.1 6379
OK
那么服务器127.0.0.1:12345就是127.0.0.1:6379 的从服务器。主从服务器的数据会保持一致
比如主服务器存储数据:
127.0.0.1:6379> set msg "hello world"
OK
然后从服务器就能直接获取数据:
127.0.0.1:12345>get msg
"hello world"
删除数据也是一样,主从会保持一致。
主从复制原理首先,Redis 的复制分为同步(sync)和命令传播(command propagate)两个操作:
接下来详细说说这两种复制。
?
文字解说:
主从服务器同步成功后,并不会一致保持这个状态,主服务器可能会执行写命令,这也主从数据就不知一致了。
为了处理这种问题,主服务器会把自己执行的写命令发送给从服务器,当从服务器执行完这些命令之后,主从服务器的数据就一致了。?
在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令:
REPLCONF ACK <replication_offset>
<replication_offset> 是从服务器当前的复制偏移量。
发送 REPLCONF ACK 命令对于主从服务器有三个作用:
1. 主服务器ID:用于标识一个服务器。
2. 复制积压缓冲区:复制积压缓冲区是由主服务器维护的一个固定长度、先进先出(FIFO)队列,默认大小为 1MB。如下:
?
Redis 主从复制主要是通过 PSYNC 命令实现。
复制分为 部分复制 以及 完整复制。
部分复制通过 复制偏移量、复制积压缓冲区、服务器ID来实现。
完整复制通过 RDB 以及 复制积压缓冲区来实现。
主从复制主要解决的是 数据备份、读写分离的问题。
?
最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer
进【Java进阶之路群】,找管理员获取哦-!
?
?
?
原文:https://blog.51cto.com/u_15220153/2952056