一、RDB持久化
- RDB持久化是使用快照的方式将数据持久化到磁盘里,首先由bgsave命令发起.
- bgsave命令首先回调用父进程去创建一个子进程(fork命令),如果已经创建有子进程,则返回,否侧创建一个子进程用于持久化.
- 创建子进程的目的是用于持久化,因为bgsave所支持的RDB持久化造作会阻塞进程,如果阻塞了主进程,将影响性能.
- 子进程将父进程的数据存储到RDB文件中,此时父进程可以执行其他的操作.
- 子进程在读取(存储)父进程的数据时,父进程在执行其他操作,这一过程是基于操作系统的CopyOnWrite机制来解决并发问题的.
二、AOF持久化
- AOF持久化是基于日志文件来实现,持久化的命令会追加到一个aof_buf缓冲区里面,再经过一段时间后,再将其刷到磁盘中的AOF文件中.
- 压缩文件操作由bgrewriteaof命令发起,与RDB持久化类似,需要调用父进程,创建子进程进行持久化操作.
- 成功fork子进程后,子进程将目前的数据快照写入一个新的AOF文件里面,此时父进程也在执行其他的操作,父进程执行的新操作(与子进程的数据差)将会保存到一个rewrite_buf缓冲文件.
- 当新AOF文件将要替换旧的AOF文件时,会将父进程与子进程的数据差部分(rewrite_buf)文件中的数据刷新的新AOF文件中,再进行替换更新.
三、RDB-AOF混合持久化
在AOF重写时,县执行bgsave生成RDB文件,再将新处理的命令追加到AOF文件的末尾.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探