Redis底层原理&面试知识 (二)全量复印 & 部分复制

redis中有master-slave结构,保证了一致性和容错性

全量复制:

1. 用到了RDB(见上一个博客)

2. psync命令:psync run_id(进行请求的master id) offset(当前slave的偏移量)。第一次是psync ? -1

这个过程很像RAFT(见mit6.824)博客中的,主节点强行一致化从节点的过程。也是需要知道从节点(slave)offset,验证了prevTerm和pervIndex,然后overwrite offset之后所有的log。具体流程如下图

Redis底层原理&面试知识 (二)全量复印 & 部分复制

问题1: bgsave需要花时间建立RDB #4

问题2: RDB传输有网络延时 #5

部分复制:

Redis底层原理&面试知识 (二)全量复印 & 部分复制

同样在连接后也是通过pysnc 通知master,请求部分更新。由于master一直都将log写入在buffer中。因此,master判断slave请求的offset是否还在buffer中,假如还在,则把buffer中offset及以后的log进行传输。否则,执行全量复制。