MST

星途 面试题库

面试题:Redis AOF重写期间可能出现的数据一致性风险及应对方法

假设在AOF重写过程中,主进程持续接收写命令,这期间可能会产生哪些数据一致性方面的风险?Redis又是如何应对这些风险来保证最终的数据一致性的?
47.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

数据一致性风险

  1. 新写命令丢失风险:AOF 重写是在子进程中进行的,主进程在重写期间持续接收写命令,若这些新写命令没有妥善处理,可能会在重写完成后丢失,导致数据不一致。
  2. 数据覆盖风险:子进程重写 AOF 时依据的是重写开始时的数据状态,若主进程此时有对重写数据集中已存在键的修改操作,新数据可能被旧数据覆盖,造成数据不一致。

Redis应对措施

  1. 缓存新写命令:主进程在 AOF 重写期间,将新接收的写命令缓存到一个缓冲区(称为 AOF 重写缓冲区)。这样即使子进程重写 AOF 时未包含这些新命令,后续也可通过缓冲区中的命令进行补充。
  2. 数据同步合并:子进程完成 AOF 重写后,主进程会将 AOF 重写缓冲区中的命令追加到新生成的 AOF 文件末尾。这一步确保了重写过程中主进程接收的新写命令也被包含在最终的 AOF 文件中,从而保证了数据的最终一致性。