当 Redis 执行 RDB 快照生成操作时,它对同时到来的客户端请求采取何种处理策略?
考察说明
考查对 Redis 持久化机制中 RDB 生成过程与请求处理并发关系的理解。
回答思路
- 【回答框架 1】Redis 生成 RDB 文件时,默认采用 fork 子进程方式。主进程 fork 后继续处理客户端请求,子进程负责将数据写入临时 RDB 文件,完成后替换旧文件。
- 【回答框架 2】fork 依赖操作系统写时复制机制。子进程共享主进程内存快照,主进程后续写操作会复制受影响的内存页,因此请求可正常处理,但可能增加内存和 IO 开销。
- 【回答框架 3】若开启 AOF 重写或 RDB 保存,主进程在 fork 时可能短暂阻塞,尤其在内存较大或系统负载高时,阻塞时间与内存大小相关。
- 【回答框架 4】RDB 生成期间,主进程正常响应读写请求,但写操作会触发 COW 复制,可能造成额外内存消耗;极端内存不足时可能影响稳定性。
- 【回答框架 5】RDB 文件生成是异步的,不阻塞请求处理,但需关注 fork 阻塞和 COW 内存峰值,可通过调整配置如减少 fork 频率或使用低峰期执行。
- 【关键点 1】RDB 生成采用 fork 子进程,主进程不阻塞请求处理。
- 【关键点 2】写时复制机制使主进程写操作复制内存页,增加内存和 IO 开销。
- 【关键点 3】fork 瞬间可能阻塞主进程,阻塞时长与内存大小和系统状态相关。
- 【关键点 4】RDB 生成期间请求处理正常,但需警惕内存峰值和性能影响。
- 【关键点 5】可通过合理配置保存策略和监控 fork 耗时来优化。
- 【易错点 1】误认为 RDB 生成期间请求被阻塞或丢弃,实际请求正常处理。
- 【易错点 2】忽略写时复制带来的内存放大,导致内存不足或 OOM 风险。
- 【易错点 3】认为 RDB 生成是纯异步无任何影响,忽略 fork 阻塞和 COW 开销。