MST

星途 面试题库

面试题:Redis复制功能中过期键处理的基本容错机制是什么

在Redis的复制功能里,涉及过期键处理时,有一些基本的容错设计来保证数据一致性和系统稳定性。请阐述这些基本的容错机制是如何运作的。
30.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

主库过期键处理

  1. 正常过期删除:主库会像处理普通键一样,按照过期策略(如定期删除、惰性删除)对过期键进行处理。当一个键过期时,主库会删除该键,并向从库发送 DEL 命令。这样从库就能与主库保持数据一致性,知道该键已过期并删除。
  2. 过期键传播:主库在执行写命令修改数据时,如果涉及到过期键,会同时将这个修改操作(包括对过期键的操作)以 REPL 协议的形式发送给从库。从库收到这些命令后,会在自己的数据副本上执行相同的操作,从而保持与主库的数据状态一致。

从库过期键处理

  1. 不主动过期删除:从库不会主动按照过期策略去删除过期键,而是等待主库发送 DEL 命令或者其他覆盖该键的写命令。这样设计是为了保证主从库之间的数据一致性,避免从库自行删除过期键后与主库状态不一致的情况。
  2. 过期键查询处理:当客户端在从库上查询一个过期键时,从库不会直接返回键已过期的信息。因为从库要保持与主库的数据一致性,它会将这个查询请求转发给主库(如果配置了 slave-read-only yes),由主库来判断键是否过期并返回结果。如果主库判断该键已过期,会返回键不存在的信息;如果键未过期,则返回键的值。这种方式保证了客户端在从库上查询到的数据与主库一致。

网络异常时的容错

  1. 部分重同步:如果主从库之间的网络出现短暂中断,当网络恢复后,从库会尝试与主库进行部分重同步。主库会记录最近执行的写命令,生成一个 repl_backlog。从库会向主库发送自己的偏移量,主库根据偏移量判断哪些写命令需要补发。这样,即使在网络中断期间有过期键的相关操作,从库也能通过部分重同步获取到这些操作,从而保持数据一致性。
  2. 全量重同步:如果网络中断时间较长,导致部分重同步无法进行(如从库的偏移量与主库记录的 repl_backlog 不匹配),主从库会进行全量重同步。主库会将自己的整个数据集发送给从库,从库清空当前数据并重新加载主库发送的数据。在这个过程中,过期键也会随着全量数据一起被正确同步,确保从库的数据与主库一致。