RDB 持久化原理
面试官问:"Redis 怎么实现持久化?"
小张说:"用 RDB 和 AOF。"
面试官追问:"RDB 是怎么生成的?"
小张说:"...fork 一个子进程?"
面试官继续追问:"fork 的过程中会不会阻塞?COW 是什么?"
小张开始支支吾吾。
RDB 是 Redis 持久化的核心机制之一。这道题能说清楚 fork、COW、BGSAVE 流程的候选人,对 Redis 的进程模型有较深的理解。
一、RDB 持久化概述 🔴
1.1 RDB 的原理
1.2 触发方式
1.3 ❌ 错误示范
候选人原话:"BGSAVE 就是 Redis 在后台保存数据。"
问题诊断:BGSAVE 是 fork 一个子进程,由子进程生成 RDB 文件。主进程不阻塞,但 fork 过程本身可能有短暂阻塞。
候选人原话 2:"fork 复制了 Redis 的所有数据,内存会翻倍。"
问题诊断:混淆了 fork 和 COW。fork 只是复制了页表(不是完整数据),实际内存复制是 COW 机制控制的。
【面试官心理】 这道题我能从 fork 的过程追问。如果候选人能说清楚"fork 复制页表但共享物理内存,只有写入时才复制(COW)",说明他对 Linux 进程模型有深入理解。
二、fork 机制详解 🔴
2.1 fork 的过程
2.2 fork 的内存开销
三、写时复制(Copy On Write)🟡
3.1 COW 原理
3.2 COW 的触发条件
3.3 fork 阻塞的真正原因
四、RDB 文件结构 🟡
4.1 RDB 文件格式
4.2 压缩格式
五、生产避坑 🟢
5.1 RDB 的缺点
5.2 最佳配置
【面试官心理】 RDB 持久化是 Redis 面试中的高频题。能说清楚 COW 机制和 fork 过程的候选人,说明他对 Linux 进程模型有实战理解。