Redis主从复制

89 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情 ​

Redis主从复制

Redis的复制功能是支持多个数据库之间的数据同步。主数据库可用进行读写操作,当主数据库的数据发生

变化时会自动将数据同步到从数据库。从数据库一般是只读的,它会接收主数据库同步过来的数据。一个主数据库可用有多个从数据库,而一个从数据库只能有一个主数据库。

主从复制的原理:(全量同步)

1.当启动一个从节点时,它会发送一个PSYNC命令给主节点。

2.如果是从节点初次连接到主节点,那么会触发一次全量复制。此时主节点会启动一个后台线程,开始生

成一份RDB快照文件。

3.同时还会将从客户端client新收到的所有写命令缓存在内存中。RDB文件生成后,主节点会将RDB文件发

送给从节点,从节点会先将RDB文件写入本地磁盘,然后再从本地磁盘加载到内存中。

4.接着从节点跟主节点将内存中缓存的写命令发送到从节点,从节点同步这些数据。

5.如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分确实的

数据同步给从节点。

增量同步

Redis同步的是指令流,主节点会将那些对自己对状态产生

修改影响对指令记录在本地的内存buffer中,然后异步将buffer中指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一边向主节点反馈自己同步到哪里来(偏移量)。

因为内存的buffer是有限的,所以Redis主库不能将所有

的指令都记录在buffer中。Redis的复制内存buffer是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。