跳至主要內容

混合持久化

AruNi_Lu数据库Redis约 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 文件的后面部分,做到了 尽量少丢数据

所以在实践中是很推荐使用混合持久化的,有种 “鱼和熊掌都可兼得” 的感觉。

上次编辑于: