MST

星途 面试题库

面试题:Redis复制实现中如何处理部分数据同步以保障一致性

在Redis复制场景下,假设主从节点之间网络出现短暂中断后恢复,Redis是如何实现部分数据同步,从而保障数据一致性的?请简要描述其过程。
31.8万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 旧版(Redis 2.8 之前)
    • 网络中断后恢复,主从节点会进行全量同步。主节点将所有数据生成 RDB 文件发送给从节点,从节点丢弃旧数据,加载主节点发送的 RDB 文件进行数据同步。这种方式在网络短暂中断时,即使只有少量数据变化,也会导致大量数据传输,效率较低。
  2. 新版(Redis 2.8 及之后)
    • 偏移量(offset)与复制积压缓冲区(replication buffer)
      • 主节点维护一个复制积压缓冲区,这是一个固定长度的先进先出(FIFO)队列。主节点在向从节点同步数据时,会同时将数据写入复制积压缓冲区,并记录当前的复制偏移量(offset)。从节点在正常同步数据时,也会记录自己的复制偏移量。
    • 部分同步的触发
      • 当网络中断恢复后,从节点向主节点发送 PSYNC 命令,带上自己之前记录的偏移量。
    • 主节点判断
      • 主节点收到 PSYNC 命令及从节点的偏移量后,会检查复制积压缓冲区。如果从节点的偏移量在复制积压缓冲区的范围内,说明主节点可以通过复制积压缓冲区获取从节点丢失的数据。
      • 主节点会从复制积压缓冲区中提取从节点缺失的数据部分,发送给从节点,这就是部分数据同步。同时,主节点和从节点更新偏移量。
    • 全量同步情况
      • 如果从节点的偏移量不在复制积压缓冲区范围内,比如从节点是新加入的或者网络中断时间过长,复制积压缓冲区中已没有从节点缺失的数据,主节点会进行全量同步,重新生成 RDB 文件发送给从节点。