面试题答案
一键面试重连机制
- 自动尝试重连:从节点在检测到与主节点的网络连接中断后,会按照一定的时间间隔自动尝试重新连接主节点。这个时间间隔通常会随着重连失败次数的增加而逐渐延长,以避免过于频繁地无效尝试。例如,初始重连间隔可能是1秒,每次失败后翻倍。
- 配置参数控制:在Redis配置文件中,可以通过
repl-timeout
等参数来设置连接超时时间,影响重连的行为。如果在指定时间内未能成功连接主节点,则判定此次重连失败。
部分重同步
- 场景:部分重同步适用于网络中断时间较短,主节点的数据变化量相对较小的情况。此时从节点可以只获取中断期间主节点新增的数据,而不需要进行全量的数据同步,从而减少带宽和时间消耗。
- 实现方式:
- 主节点维护复制偏移量:主节点会为每个从节点维护一个复制偏移量(replication offset),记录从节点当前复制数据的位置。同时主节点自身也有一个全局的复制偏移量,记录已处理的写命令的偏移量。
- 从节点记录偏移量:从节点同样保存自己的复制偏移量。当网络中断恢复后,从节点向主节点发送
PSYNC
命令,并携带自己最后的复制偏移量。 - 主节点判断:主节点收到
PSYNC
命令和偏移量后,会判断该偏移量是否在其复制积压缓冲区(replication backlog)内。如果在,主节点会将缓冲区中从该偏移量开始的增量数据发送给从节点,从节点接收并应用这些增量数据,完成部分重同步。
全量重同步
- 场景:当网络中断时间较长,主节点的数据变化量较大,或者从节点是初次连接主节点时,就需要进行全量重同步。
- 实现方式:
- 从节点发起请求:从节点向主节点发送
SYNC
命令(Redis 2.8 之前使用SYNC
,之后使用PSYNC
,如果主节点不支持部分重同步,也会以全量重同步方式响应)。 - 主节点执行BGSAVE:主节点收到
SYNC
命令后,会执行BGSAVE
命令,在后台生成RDB快照文件,同时将新收到的写命令缓存起来。 - 发送RDB文件:RDB文件生成完成后,主节点将RDB文件发送给从节点,从节点接收到RDB文件后,会先清空自身的数据,然后加载RDB文件,将数据恢复到主节点生成RDB文件时的状态。
- 发送缓存命令:主节点将缓存的写命令发送给从节点,从节点按顺序执行这些命令,从而使数据与主节点保持一致,完成全量重同步。
- 从节点发起请求:从节点向主节点发送