面试题答案
一键面试- 部分重传缓冲区:
- Redis 主节点维护一个部分重传缓冲区,该缓冲区记录主节点最近发送给从节点的写命令。当从节点因网络故障等原因断开连接后重新连接时,如果从节点的复制偏移量在部分重传缓冲区的记录范围内,主节点可以直接从缓冲区中提取这部分数据发送给从节点,而不需要重新全量同步所有数据。这样大大减少了数据传输量。
- 复制偏移量:
- 主从节点都维护一个复制偏移量。主节点每向从节点发送一定量的数据,就会增加自己的复制偏移量;从节点接收数据后也会相应增加自己的复制偏移量。当从节点重连时,会向主节点发送自己最后的复制偏移量。主节点通过对比该偏移量和部分重传缓冲区的范围,判断是否可以进行部分重同步。如果可以,就基于这个偏移量开始传输后续的数据,避免重复传输已接收过的数据。
- 复制积压缓冲区:
- 这是部分重传缓冲区的一种扩展和优化。它是一个环形缓冲区,主节点不断将写命令写入这个缓冲区。从节点断线重连时,主节点根据从节点提供的偏移量,在复制积压缓冲区中找到对应的位置,从该位置开始向从节点重传数据。由于它是环形结构,可以循环使用空间,能更灵活高效地处理数据重传,减少全量重同步的概率,从而减少数据传输量。