Skip to content

Redis 持久化 → OS fork → COW 追问链

追问路径

Q: Redis RDB持久化怎么实现的?
→ fork子进程做快照
  Q: fork的开销大吗?
  → COW(Copy-On-Write),fork本身很快
    Q: 什么是COW?
    → 父子共享物理页,写时才复制
      Q: 如果RDB期间大量写入呢?
      → 内存翻倍风险,需要预留内存

涉及知识点

核心串联逻辑

  1. Redis BGSAVE 调用 fork() 创建子进程
  2. fork 为什么快:Linux 使用 COW,只复制页表不复制物理页
  3. 写时复制:父进程写入时 OS 为对应页创建副本,子进程仍读旧数据
  4. 风险:高写入场景下大量页被复制 → 内存使用翻倍
  5. 最佳实践:预留 maxmemory 的 1.5-2 倍物理内存

面试回答串联

"Redis RDB 通过 fork 子进程实现快照,利用 OS 的 COW 机制保证 fork 瞬间几乎不复制内存。但如果 RDB 期间写入量大,COW 会导致大量页面复制,极端情况内存翻倍,所以生产环境需要预留足够内存。"