Redis RDB 过程中 COW 的具体工作原理
- RDB 生成快照过程
- Redis 执行
BGSAVE命令时,会 fork 一个子进程。子进程负责将数据写入磁盘,生成 RDB 文件。 - 子进程创建时,父进程和子进程共享同一块内存。由于子进程是通过 fork 方式创建的,子进程会继承父进程的内存数据,这样父进程和子进程都指向相同的物理内存页。
- Redis 执行
- COW 的作用
- 在 fork 之后,如果父进程需要对某块内存操作时,此时不能直接修改该内存,而是需要将修改的内存页复制一份(写时复制),这样父子进程不再共享相同内存,子进程仍然保留快照生成的旧数据,而父进程可以继续进行数据修改。
- 这样做的好处是子进程可以继续生成RDB快照,不会因为父进程修改而导致数据不一致。同时,内存的复制只有在需要修改的情况下才发生,这样可以大大节省资源。