面试题答案
一键面试关键技术点
- 心跳机制:主节点定期向从节点发送PING命令,从节点回复PONG响应,用于检测主从节点间的连接状态,保证数据传输链路正常。
- 部分重同步:新版Redis中,主节点会记录复制积压缓冲区(replication buffer),当网络中断等导致数据同步短暂中断恢复后,从节点可以通过发送PSYNC命令,主节点依据复制积压缓冲区,只将缺失部分数据同步给从节点,减少全量同步开销,提升实时性。
- 无盘复制:主节点在进行全量同步时,无需先将RDB文件写入磁盘,而是直接通过网络发送给从节点,减少磁盘I/O操作,加快全量同步速度。
流程
- 全量同步流程:
- 从节点初次连接主节点,发送SYNC命令(新版Redis中,从节点先发送PSYNC命令,若主节点不支持部分重同步,则执行全量同步流程)。
- 主节点收到命令后,执行BGSAVE生成RDB文件,并将此后的写命令缓存到复制积压缓冲区。
- 主节点将RDB文件发送给从节点,从节点接收并载入RDB文件,完成数据初始化。
- 主节点将复制积压缓冲区缓存的写命令发送给从节点,从节点执行这些命令,完成全量同步。
- 部分重同步流程:
- 网络中断时,从节点记录自己的复制偏移量(replication offset)。
- 网络恢复后,从节点发送PSYNC 命令给主节点,其中runid是主节点的运行ID,offset是从节点记录的复制偏移量。
- 主节点判断offset是否在复制积压缓冲区范围内,若在,则执行部分重同步:主节点将复制积压缓冲区中从offset开始的数据发送给从节点,从节点接收并执行,完成部分重同步。若不在,则执行全量同步流程。