RDB-AOF混合持久化方式

RDB-AOF混合持久化方式

RDB-AOF混合持久化方式即
做镜像全量持久化,AOF做增量持久化

RDB-AOF混合持久化方式_第1张图片

混合持久化

重启Redis时,我们很少使用rdb来恢复内存状态,因为会丢失大量数据。我们通常使用AOF日志重写,
但是AOF重写性能相对rdb来说要慢很多,这样在Redis实例很大的情况下,启动需要花费很长的时间。

Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。

1、混合持久化
AOF在进行(aof文件里可能有太多没用指令,所以aof会定期根据内存的最新数据生成aof文件)时 , 将重写这一刻之前的内存rdb快照文件的内容和增量的AOF修改内存数据的命令日志文件存在一起都写入新的新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,原子的覆盖原有的AOF文件,完成新旧两个AOF文件的替换。

混合持久化文件结构:
RDB-AOF混合持久化方式_第2张图片

2、混合持久化配置
开启混合持久化:

aof-use-rdb-preamble yes
RDB-AOF混合持久化方式_第3张图片

重启Redis服务。

3、bgrewriteaof重写AOF
AOF根据配置规则在后台自动重写aof文件,也可以人为执行命令bgrewriteaof重写AOF。 于是在Redis重启的时候,
可以先加载rdb的内容,然后再执行aof指令部分达到Redis数据重放的目的,重启效率因此大幅得到提升。

4、实例验证

通过bgrewriteaof手动重写aof。

查看appendonly.aof文件内容,看到rdb格式的二进制文件。

再执行一条set命令。
RDB-AOF混合持久化方式_第4张图片

然后再看appendonly.aof文件内容。
RDB-AOF混合持久化方式_第5张图片

从文件格式可以看到,混合持久化appendonly.aof文件由rdb格式和aof指令格式两大部分组成。
Redis在重启时,先重写rdb到内存,然后在重写aof到内存,重启效率高,还能减少数据的丢失。

那如果突然机器掉电会怎样?

取决于AOF日志sync属性的配置

  • 如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。
  • 但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。

原文来自:https://blog.csdn.net/yhl_jxy/article/details/91879874

你可能感兴趣的:(RDB-AOF混合持久化方式)