Redis 持久化机制主要有RDB和AOF两种
RDB
RDB 持久化是把当前进程数据⽣成快照保存到硬盘的过程。
RDB 触发机制
命令触发:
①save 命令:阻塞当前 Redis 服务器,直到 RDB 过程完成为⽌,对于内存⽐较⼤的实例造成⻓时间阻塞,基本不采⽤。
②bgsave 命令:Redis 进程执⾏ fork 操作创建⼦进程,RDB 持久化过程由⼦进程负责,完成后⾃动
结束。阻塞只发⽣在 fork 阶段,⼀般时间很短。
⾃动触发:
1.使⽤ save 配置。如 “save m n” 表⽰ m 秒内数据集发⽣了 n 次修改,⾃动 RDB 持久化。
2. 从节点进⾏全量复制操作时,主节点⾃动进⾏ RDB 持久化,随后将 RDB ⽂件内容发送给从结点。
3. 执⾏ shutdown 命令关闭 Redis 时,执⾏ RDB 持久化
RDB 机制流程
由于只有bgsave才会在生产环境下采用,且自动触发的流程也和bgsave指令执行流程一致,故对bgsave指令的执行流程进行说明:
bgsave的执行过程如下:
- 执⾏ bgsave 命令,Redis ⽗进程判断当前进是否存在其他正在执⾏的⼦进程,如 RDB/AOF ⼦进
程,如果存在 bgsave 命令直接返回。 - ⽗进程执⾏ fork 创建⼦进程,fork 过程中⽗进程会阻塞,通过 info stats 命令查看latest_fork_usec 选项,可以获取最近⼀次 fork 操作的耗时,单位为微秒。
- ⽗进程 fork 完成后,bgsave 命令返回 “Background saving started” 信息并不再阻塞⽗进程,可
以继续响应其他命令。 - ⼦进程创建 RDB ⽂件,根据⽗进程内存⽣成临时快照⽂件,完成后对原有⽂件进⾏原⼦替换。执
⾏ lastsave 命令可以获取最后⼀次⽣成 RDB 的时间,对应 info 统计的 rdb_last_save_time 选项。 - 进程发送信号给⽗进程表⽰完成,⽗进程更新统计信息