Redis集群-复制

114 阅读2分钟

Redis复制原理

在redis主从架构中,为了保持数据的一致性,会使用到复制的原理 主数据库可以进行读写操作,从数据苦苦只进行读操作

复制命令

  1. SAVE
  2. BGSAVE

原理

以redis2.6来说

首先从数据库启动后,会向主数据库发送SYNC命令请求数据, 主数据库收到后在后台保存快照文件,在这期间收到的命令都会缓存起来, 在快照文件完成后,先将快照这个二进制文件传给从数据库,从数据库收到后载入, 然后主数据早发送缓存的命令,从数据库收到后执行命令,之后就完成了主从数据库的同步。

无硬盘复制

复制初始化,会在硬盘中创建RDOB快照文件 redis 2.8.18版本 开启此选项后,主数据库就不会将快照保存在磁盘,而是直接通过网络发送给从数据库

主从架构

主从架构是为了当主数据库挂掉后,为了保持可用,将从数据升为主数据库的一种架构

命令

SLAVEOF NO ONE

增量复制

redis 2.8 版本之后 好处:避免了全部的命令快照,只针对短线后的命令进行复制

增量复制实现原理

  1. 从数据库会存储主书库运行的ID
  2. 复制同步阶段,主数据库每将一个命令传给从数据库,都会把这条命令放到给积压队列中,并记录当前积压队列的偏移量范围
  3. 从数据库收到命令后,会记录该命令的偏移量 2.8版本以后,从数据库发送的是PSYNC命令

主数据库会通过以下的判断来进行是否执行增量复制

  1. 主数据库判断从数据库的运行ID是否和自身一致
  2. 判断从数据库同步成功命令的偏移量是否剖在积压队列中

如果两哥条件头不满足,则进行全部同步