Redis持久化(六)-RDB+AOF混合持久化

RDB-AOF混合持久化

  • RDB+AOF同时使用
  • RDB-AOF混合持久化

RDB+AOF同时使用

同时使用RDB持久化和AOF持久化是可行的,只要注意以下问题即可:

  • 同时使用两种持久化功能需要耗费大量系统资源,系统的硬件必须能够支撑运行这两种功能所需的资源消耗,否则会给系统性能带来影响
  • Redis服务器在启动时,会优先使用AOF文件进行数据恢复,只有在没有检测到AOF文件时,才会考虑寻找并使用RDB文件进行数据恢复
  • 当Redis服务器正在后台生成新的RDB文件时,如果有用户向服务器发送BGREWRITEAOF命令,或者配置选项中设置的AOF重写条件被满足了,那么服务器 将把 AOF重写操作 推延到 RDB文件创建完毕之后再执行,以此来避免两种持久化操作同时执行并争抢系统资源
  • 同样,当服务器正在执行BGREWRITEAOF命令时,用户发送或者被触发的BGSAVE命令也会推延到BGREWRITEAOF命令执行完毕之后再执行

RDB-AOF混合持久化

Redis的两种持久化方式,它们都有各自的优点和缺点:

  • RDB持久化可以生成紧凑的RDB文件,并且使用RDB文件进行数据恢复的速度也非常快,但是RDB的全量持久化模式可能会让服务器在停机时丢失大量数据
  • 与RDB持久化相比,AOF持久化可以将丢失数据的时间窗口限制在1s之内,但是协议文本格式的AOF文件的体积将比RDB文件要大得多,并且数据恢复过程也会相对较慢

由于RDB持久化和AOF持久化都有各自的优缺点,因此在很长一段时间里,如何选择合适的持久化方式成了很多Redis用户面临的一个难题
为了解决这个问题,Redis从4.0版本开始引入RDB-AOF混合持久化模式,这种模式是基于AOF持久化模式构建而来的

如果打开了服务器的AOF持久化功能,并且将aof-use-rdb-preamble 选项的值设置成了yes
那么 Redis服务器 在执行 AOF重写操作时,就会像执行BGSAVE命令那样,根据数据库当前的状态 生成出 相应的RDB数据,并将这些数据 写入 新建的AOF文件中,至于那些 在AOF重写开始之后 执行的Redis命令,则会继续以协议文本的方式 追加到 新AOF文件的末尾,即已有的RDB数据的后面

换句话说,在开启了RDB-AOF混合持久化功能之后,服务器生成的AOF文件将由两个部分组成,其中位于AOF文件开头的是RDB格式的数据,而跟在RDB数据后面的则是AOF格式的数据
Redis持久化(六)-RDB+AOF混合持久化_第1张图片

当一个支持RDB-AOF混合持久化模式的Redis服务器启动并载入AOF文件时,它会检查AOF文件的开头是否包含了RDB格式的内容

  • 如果包含,那么服务器就会先载入开头的RDB数据,然后再载入之后的AOF数据
  • 如果AOF文件只包含AOF数据,那么服务器将直接载入AOF数据

Redis持久化(六)-RDB+AOF混合持久化_第2张图片
通过使用RDB-AOF混合持久化功能,可以同时获得RDB持久化和AOF持久化的优点:服务器既可以通过AOF文件包含的RDB数据来实现快速的数据恢复操作,又可以通过AOF文件包含的AOF数据来将丢失数据的时间窗口限制在1s之内

需要注意的是,因为RDB-AOF混合持久化生成的AOF文件会同时包含RDB格式的数据和AOF格式的数据,而传统的AOF持久化只会生成包含AOF格式的数据,所以为了避免全新的RDB-AOF混合持久化功能给传统的AOF持久化功能使用者带来困惑,Redis目前默认是没有打开RDB-AOF混合持久化功能的aof-use-rdb-preamble no

你可能感兴趣的:(Redis,redis,混合持久化,AOF,RDB)