面试题答案
一键面试1. Redis主从复制原理概述
Redis主从复制是一个异步的复制过程,主节点以写命令传播的方式将数据更新发送给从节点。从节点通过向主节点发送PSYNC
命令来进行复制初始化。PSYNC
命令有两种模式:全量复制(用于初次复制或无法部分重同步时)和部分重同步。
2. 部分重同步触发条件及其意义
- 复制偏移量:主从节点各自维护一个复制偏移量。主节点每处理一个写命令,就将自己的复制偏移量增加相应字节数;从节点收到主节点发送的写命令后,也增加自己的复制偏移量。当从节点因为网络闪断等原因重新连接主节点时,如果从节点的复制偏移量在主节点的复制积压缓冲区(一个环形缓冲区,记录主节点最近传播的写命令)内,就可以触发部分重同步。
- 提高复制效率:无需像全量复制那样重新传输全部数据,仅需传输从节点断开连接期间主节点新产生的写命令,大大减少了数据传输量,提高了同步速度。
- 减少网络开销:只传输必要的增量数据,降低了网络带宽的占用,尤其是在主从节点数据量较大时,效果更为显著。
- 保障数据一致性:快速恢复同步,使得从节点能尽快跟上主节点的数据更新,保证了数据在较短时间内的一致性。
- 复制积压缓冲区:主节点为了支持部分重同步,维护一个固定大小的复制积压缓冲区。从节点向主节点发送
PSYNC
命令时,带上自己的复制偏移量,如果该偏移量在主节点的复制积压缓冲区范围内,主节点就可以从中获取从节点缺少的数据进行部分重同步。- 提高复制效率:避免全量复制的高成本操作,利用缓冲区快速定位并发送缺失数据,加快同步过程。
- 减少网络开销:仅传输缓冲区中的增量数据,而不是整个数据集,有效节省网络资源。
- 保障数据一致性:及时恢复从节点的数据同步,确保主从节点数据的一致性。
- 服务器运行ID:主节点有一个运行ID(run ID),从节点初次连接主节点时会保存这个运行ID。当从节点重新连接主节点时,如果保存的运行ID与主节点当前的运行ID相同,且复制偏移量满足条件,就可以进行部分重同步。若运行ID不同,说明主节点已更换,只能进行全量复制。
- 提高复制效率:确认主节点身份,避免不必要的全量复制,提高同步效率。
- 减少网络开销:若运行ID相同且偏移量允许部分重同步,就无需进行全量数据传输,减少网络负担。
- 保障数据一致性:确保从节点是与正确的主节点进行同步,防止数据错误同步,保证数据一致性。
3. 不同业务场景下的应用
- 电商商品浏览场景:在电商系统中,商品信息(如名称、价格等)缓存在Redis中。主节点存储最新的商品信息,多个从节点用于支持大量的读请求。当网络偶尔闪断,从节点重新连接主节点时,由于商品信息更新频率相对不高,只要从节点的复制偏移量在主节点的复制积压缓冲区范围内,就可触发部分重同步。这既提高了同步效率,减少了网络开销(无需重新传输大量商品信息),又保障了数据一致性,使得用户看到的商品价格等信息始终是准确的。
- 实时统计场景:例如网站的实时访问量统计,主节点不断接收并处理新的访问记录(写操作),从节点用于展示实时统计数据给管理员查看。由于访问记录更新频繁,复制积压缓冲区需要设置合适的大小。当从节点因短暂网络问题断开后重新连接,若其复制偏移量在缓冲区范围内,部分重同步可快速恢复,减少了重新传输大量访问记录的开销,保证管理员看到的数据与主节点基本实时一致。