我们都知道RDB
和AOF
数据持久化的优缺点:
RDB
:数据恢复快,安全性低;
AOF
:数据恢复慢,安全性高;
那么如果能将RDB和AOF两者优点结合起来,是不是一种很不错的选择呢? 在此背景下,Redis4推出了RDB AOF混合持久化方式。
RDB AOF混合持久化:
- RDB文件存储的是二进制数据,不可读;
- AOF文件存储的是操作指令,可读;
Redis4之前AOF文件存储的数据全部是:操作指令 ;Redis4之后AOF文件存储的数据是:二进制数据 操作指令 。
1.验证过程:
- 首先,启动一个Redis4版本的空实例,开启混合持久化功能,接着手动写入一条数据,最后查看AOF文件内容是操作指令。
aof-use-rdb-preamble yes #开启RDB AOF混合持久化功能
set name zhang #写入一条数据
2.执行bgwriteaof
命令,手动触发AOF
重写
3.查看AOF文件(内容变成二进制不可读数据):
4.继续写入一条新命令,查看AOF文件内容此时是二进制数据 操作指令。
代码语言:javascript复制set age 18
2.完整流程总结:
- 新启动空闲Redis实例,开启混合持久化功能,写入数据,此时AOF文件内容是操作指令;
- 执行AOF重写功能,fork()的子进程会把共享内存中所有的数据以RDB形式写到AOF临时文件中,然后继续把重写缓冲区中的增量数据以操作指令类型到AOF临时文件中,最后用AOF临时文件替换原AOF文件,AOF重写完成;
- 继续写入数据,此时写入的新数据依然是操作指令类型;
- 执行AOF重写,重复步骤2操作..... ;
- Redis重启,此时会加载AOF文件(前面部分是二进制数据,后面部分是指令数据的AOF文件)置内存;