Redis如何选择RDB和AOF持久化

发布于 2023-06-28  355 次阅读


目标:如何选择RDB、AOF

同时开启

Redis先加载AOF文件来恢复原始数据,因为AOF数据比RDB更完整,但是AOF存在潜在的bug,如把错误的操作记录写入了AOF,会导出数据恢复失败,所以可以把RDB作为后备数据。

为了考虑能,可以只在Slave上开启RDB,并且15min备份一次,如果为了避免AOF rewite的IO以及阻塞,可以在Redis集群中不开启AOF,靠集群的备份机制来保证可用性,在启动时选取较新的RDB文件,如果整个集群全部崩溃,会丢失15min前的数据。


混合模式

Redis4.0开始支持该模式

解决的问题:Redis在重启时通常是加载AOF文件,但加载速度慢。因为RDB数据不完整,所以加载AOF。

开启方式:aof-use-rdb-preamble true

开启后,AOF在重写时会直接读取RDB中的内容。

运行过程:通过bgrwriteaof完成,不同的是当开启混合持久化后

  1. 子进程会把内存中的数据以RDB的方式写入AOF中
  2. 把重写缓冲区中的增量命令以AOF方式写入到文件
  3. 将含有RDB个数和AOF个数的AOF数据覆盖旧的AOF文件

新的AOF文件中,一部分数据来自RDB文件,一部分来自Redis运行过程时的增量数据


数据恢复

当我们开启了混合持久化时,启动Redis依然优先加载AOF文件,AOF文件加载可能有两种情况如下:

  • AOF文件开头是以RDB的格式,先加载RDB内容再加载剩余的AOF
  • AOF文件开头的格式,直接以AOF格式加载整个文件

优点:既能快速备份又能避免大量数据丢失

缺点:RDB是压缩格式,AOF在读取它时可读性较差


二者动态切换

在Redis2.2或以上版本,可以在重启的情况下,从RDB切换到AOF"

  • 为最新的dump.rdb文件创建一个备份
  • 将备份放到一个安全的地方
 # 复制备份
cp dump.rdb dump.rdb.bak

执行以下两条命令:

# 开启aof
redis-cli config set appendonly yes
# 关闭rdb
redis-cli config set save “”
  • 确保写命令会被正确地追加到 AOF 文件的末尾
  • 执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾

什么是RDB和AOF

届ける言葉を今は育ててる
最后更新于 2023-07-15