背景介绍
Redis是一个内存型KV存储,以其高性能特性得到广泛应用。作为数据库,主从同步一直是一个非常核心的功能。其主从同步是基于最终一致性。
本章主要是主从同步相关流程和代码的分析,内容写于2015年基于Redis 2.6版本。
流程分析
主库视角
站在Redis-Master视角,根据代码整理出了主从同步过程的函数调用关系。同步过程有两种可能的情况:
- 主从同步:正常状态下的实时同步
- 主从复制:主从相差(参数控制)过大时,尝试进行部分复制或全量复制
从库视角
对于从库来说,它会主动向主库发起复制请求,对应主库的主从复制场景。
代码解析
主从同步
|
|
|
|
|
|
主从复制
主从复制主要是两个入口函数
对于master来说,syncCommand()用来处理slave的复制请求
对于slave来说,syncWithMaster()向master发起请求,并且通过updateSlavesWaitingBgsave()
|
|
|
|
以下是站在从库视角代码解析
|
|
|
|