混合持久化
约 551 字大约 2 分钟
本文内容
1. 为什么需要混合持久化?
上一篇文章中说到,RDB 快照的最大优势是恢复速度快,但快照的频率不好控制;AOF 快照的最大优势是丢失数据少,但恢复速度较慢。
Redis 4.0 中提出的 混合持久化 既能利用 RDB 的快速恢复优势,又能以较小的开销做到尽量少丢数据。
下面就来看看混合持久化到底是什么,是如何做到的上面效果的。
2. 什么是混合持久化?
混合持久化就是将 RDB 快照和 AOF 日志结合起来使用,以发挥各自的优势,要开启混合持久化,需要修改如下配置:
aof-use-rdb-preamble yes
混合持久化发生在 AOF 重写的过程中,在 AOF 重写时,fork 出来的子进程会将内存中的数据 以 RDB 的方式写到 AOF 文件中,在此期间的更新操作会被记录到 AOF 重写缓冲区中,重写完成后,重写缓冲区中的增量数据就会以 AOF 的方式写到 AOF 文件中,然后用该 AOF 文件替换掉旧的即可。
可以发现,使用了混合持久化后,AOF 文件的前面大部分是 RDB 格式的全量数据,而后面小部分是 AOF 格式的增量数据。
这样在数据恢复时,由于前面大部分都是 RDB 内容,恢复速度很快;而且在后台子进程进行 AOF 重写期间,主线程处理的修改操作,也能记录到 AOF 文件的后面部分,做到了 尽量少丢数据。
所以在实践中是很推荐使用混合持久化的,有种 “鱼和熊掌都可兼得” 的感觉。