外观
Redis 持久化 → OS fork → COW 追问链
追问路径
Q: Redis RDB持久化怎么实现的?
→ fork子进程做快照
Q: fork的开销大吗?
→ COW(Copy-On-Write),fork本身很快
Q: 什么是COW?
→ 父子共享物理页,写时才复制
Q: 如果RDB期间大量写入呢?
→ 内存翻倍风险,需要预留内存涉及知识点
- Redis持久化RDB与AOF — RDB 通过 fork 子进程实现快照
- 操作系统fork与COW — fork 语义与 Copy-On-Write 机制
- JVM内存结构 — 大堆 + RDB = 内存压力(类比 GC STW)
核心串联逻辑
- Redis BGSAVE 调用
fork()创建子进程 - fork 为什么快:Linux 使用 COW,只复制页表不复制物理页
- 写时复制:父进程写入时 OS 为对应页创建副本,子进程仍读旧数据
- 风险:高写入场景下大量页被复制 → 内存使用翻倍
- 最佳实践:预留
maxmemory的 1.5-2 倍物理内存
面试回答串联
"Redis RDB 通过 fork 子进程实现快照,利用 OS 的 COW 机制保证 fork 瞬间几乎不复制内存。但如果 RDB 期间写入量大,COW 会导致大量页面复制,极端情况内存翻倍,所以生产环境需要预留足够内存。"