面试题答案
一键面试数据一致性风险
- 新写命令丢失风险:AOF 重写是在子进程中进行的,主进程在重写期间持续接收写命令,若这些新写命令没有妥善处理,可能会在重写完成后丢失,导致数据不一致。
- 数据覆盖风险:子进程重写 AOF 时依据的是重写开始时的数据状态,若主进程此时有对重写数据集中已存在键的修改操作,新数据可能被旧数据覆盖,造成数据不一致。
Redis应对措施
- 缓存新写命令:主进程在 AOF 重写期间,将新接收的写命令缓存到一个缓冲区(称为 AOF 重写缓冲区)。这样即使子进程重写 AOF 时未包含这些新命令,后续也可通过缓冲区中的命令进行补充。
- 数据同步合并:子进程完成 AOF 重写后,主进程会将 AOF 重写缓冲区中的命令追加到新生成的 AOF 文件末尾。这一步确保了重写过程中主进程接收的新写命令也被包含在最终的 AOF 文件中,从而保证了数据的最终一致性。