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。具体流程如下图
问题1: bgsave需要花时间建立RDB #4
问题2: RDB传输有网络延时 #5
部分复制:
同样在连接后也是通过pysnc 通知master,请求部分更新。由于master一直都将log写入在buffer中。因此,master判断slave请求的offset是否还在buffer中,假如还在,则把buffer中offset及以后的log进行传输。否则,执行全量复制。