Redis RDB+AOF混合持久化

2022-02-18 16:39:19 浏览数 (1)

我们都知道RDBAOF数据持久化的优缺点

RDB:数据恢复,安全性

AOF:数据恢复,安全性

那么如果能将RDBAOF两者优点结合起来,是不是一种很不错的选择呢? 在此背景下Redis4推出了RDB AOF混合持久化方式。

RDB AOF混合持久化:

  • RDB文件存储的是二进制数据,不可读
  • AOF文件存储的是操作指令,可读

Redis4之前AOF文件存储的数据全部是:操作指令 ;Redis4之后AOF文件存储的数据是:二进制数据 操作指令 。

1.验证过程:

  1. 首先,启动一个Redis4版本的空实例,开启混合持久化功能,接着手动写入一条数据,最后查看AOF文件内容是操作指令。
代码语言:javascript复制
aof-use-rdb-preamble  yes  #开启RDB AOF混合持久化功能
set name zhang  #写入一条数据
图1图1

2.执行bgwriteaof命令,手动触发AOF重写

3.查看AOF文件(内容变成二进制不可读数据):

图2图2

4.继续写入一条新命令,查看AOF文件内容此时是二进制数据 操作指令

代码语言:javascript复制
set age 18
图3图3

2.完整流程总结:

  1. 新启动空闲Redis实例,开启混合持久化功能,写入数据,此时AOF文件内容是操作指令
  2. 执行AOF重写功能,fork()的子进程会把共享内存中所有的数据以RDB形式写到AOF临时文件中,然后继续把重写缓冲区中增量数据操作指令类型AOF临时文件中,最后用AOF临时文件替换原AOF文件,AOF重写完成
  3. 继续写入数据,此时写入的新数据依然是操作指令类型
  4. 执行AOF重写,重复步骤2操作..... ;
  5. Redis重启,此时会加载AOF文件(前面部分是二进制数据,后面部分是指令数据的AOF文件)置内存;

0 人点赞