Redis复制原理
在redis主从架构中,为了保持数据的一致性,会使用到复制的原理 主数据库可以进行读写操作,从数据苦苦只进行读操作
复制命令
- SAVE
- BGSAVE
原理
以redis2.6来说
首先从数据库启动后,会向主数据库发送SYNC命令请求数据, 主数据库收到后在后台保存快照文件,在这期间收到的命令都会缓存起来, 在快照文件完成后,先将快照这个二进制文件传给从数据库,从数据库收到后载入, 然后主数据早发送缓存的命令,从数据库收到后执行命令,之后就完成了主从数据库的同步。
无硬盘复制
复制初始化,会在硬盘中创建RDOB快照文件 redis 2.8.18版本 开启此选项后,主数据库就不会将快照保存在磁盘,而是直接通过网络发送给从数据库
主从架构
主从架构是为了当主数据库挂掉后,为了保持可用,将从数据升为主数据库的一种架构
命令
SLAVEOF NO ONE
增量复制
redis 2.8 版本之后 好处:避免了全部的命令快照,只针对短线后的命令进行复制
增量复制实现原理
- 从数据库会存储主书库运行的ID
- 复制同步阶段,主数据库每将一个命令传给从数据库,都会把这条命令放到给积压队列中,并记录当前积压队列的偏移量范围
- 从数据库收到命令后,会记录该命令的偏移量 2.8版本以后,从数据库发送的是PSYNC命令
主数据库会通过以下的判断来进行是否执行增量复制
- 主数据库判断从数据库的运行ID是否和自身一致
- 判断从数据库同步成功命令的偏移量是否剖在积压队列中
如果两哥条件头不满足,则进行全部同步