本文共 2252 字,大约阅读时间需要 7 分钟。
前面的文章中分别介绍过了 和 两种持久化策略,这次要介绍一种新的方式—混合模式。
我们知道RDB方式虽然恢复快,但是数据丢失多,而AOF相比RDB数据丢失方面几乎不存在什么问题,但是恢复时间长,体积大,重写期间还会发生阻塞问题,所以综合来看两者无论你使用哪一种都会出现一些较为麻烦的问题,所以Redis4.0开始就提出了混合模式,它结合了AOF和RDB各自的优点来解决持久化问题。
# When rewriting the AOF file, Redis is able to use an RDB preamble in the# AOF file for faster rewrites and recoveries. When this option is turned# on the rewritten AOF file is composed of two different stanzas:## [RDB file][AOF tail]## When loading Redis recognizes that the AOF file starts with the "REDIS"# string and loads the prefixed RDB file, and continues loading the AOF# tail.aof-use-rdb-preamble no
aof-use-rdb-preamble:配置为yes,即表示开启混合模式。
上面的注释中已经有了介绍,混合模式的触发条件是当调用了AOF重写时执行的,也就是调用了bgrewriteaof命令。
1、启动服务端
2、客户端连接,并写入两条数据
3、查看aof文件
4、客户端执行bgrewriteaof命令,然后再次写入一条数据
5、查看服务端后台输出1783:M 03 Nov 2020 21:27:10.109 * Background append only file rewriting started by pid 17961783:M 03 Nov 2020 21:27:10.150 * AOF rewrite child asks to stop sending diffs.1796:C 03 Nov 2020 21:27:10.150 * Parent agreed to stop sending diffs. Finalizing AOF...1796:C 03 Nov 2020 21:27:10.150 * Concatenating 0.00 MB of AOF diff received from parent.1796:C 03 Nov 2020 21:27:10.150 * SYNC append only file rewrite performed1796:C 03 Nov 2020 21:27:10.150 * AOF rewrite: 6 MB of memory used by copy-on-write1783:M 03 Nov 2020 21:27:10.250 * Background AOF rewrite terminated with success1783:M 03 Nov 2020 21:27:10.250 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)1783:M 03 Nov 2020 21:27:10.250 * Background AOF rewrite finished successfully
6、再看aof文件
整个流程下来,可以看出当开启混合模式时,重写后的aof文件顶部多了一些乱码部分,而这实际上就是原本RDB文件的内容。
基本流程:
根据约定的规则,当服务器重新启动加载aof文件时,如果发现文件是以“Redis”字符串开头的,则先按照RDB格式的数据进行加载,再加载后面的AOF格式中的数据。
服务器重启后,输出内容。
1824:M 03 Nov 2020 21:41:35.340 * Reading RDB preamble from AOF file...1824:M 03 Nov 2020 21:41:35.340 * Reading the remaining AOF tail...1824:M 03 Nov 2020 21:41:35.340 * DB loaded from append only file: 0.000 seconds1824:M 03 Nov 2020 21:41:35.340 * Ready to accept connections
优点
缺点
转载地址:http://holrb.baihongyu.com/