MST

星途 面试题库

面试题:Redis RDB持久化在高并发场景下可能面临哪些数据一致性问题?

在高并发写入的场景下,Redis RDB持久化机制可能会因为哪些原因导致数据一致性出现问题?请简要阐述。
37.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 定时快照问题
    • RDB 是定期进行快照操作。在两次快照之间如果发生高并发写入,新写入的数据还未被快照保存,一旦 Redis 发生故障重启,这部分新写入的数据就会丢失,导致数据不一致。例如,设置每 5 分钟进行一次 RDB 快照,在 2 分钟时写入了大量数据,3 分钟时 Redis 崩溃,这 2 分钟内写入的数据在重启后就无法恢复。
  2. fork 子进程时的阻塞影响
    • RDB 持久化执行时会通过 fork 子进程来进行数据快照。在高并发写入场景下,fork 操作可能会阻塞主线程一小段时间。虽然 Redis 采用写时复制(COW)技术,但 fork 操作本身需要复制内存页表等信息,可能会导致主线程在这短暂时间内无法及时处理新的写入请求,使得部分写入请求响应延迟甚至丢失,影响数据一致性。例如,在高并发写入时,fork 操作导致主线程阻塞 100 毫秒,这期间可能有部分写入请求未被及时处理。
  3. 子进程写入 RDB 文件时的问题
    • 子进程在将数据写入 RDB 文件过程中,如果磁盘 I/O 出现问题,比如磁盘已满、I/O 性能突然下降等,可能导致 RDB 文件写入不完整。当 Redis 基于这个不完整的 RDB 文件重启时,就会出现数据不一致的情况。例如,磁盘空间在子进程写入 RDB 文件时突然耗尽,导致文件只写入了部分数据,重启后数据缺失。