AOF持久化

AOF(Append-only-file)持久化:保存写状态

  • 记录除查询以外所有变更数据库状态的指令
  • 以append的形式将命令追加保存在AOF文件中(增量)

配置方法

默认关闭,在配置文件中将appendonly no改为appendonly yes即可

  • 配置写入方式:

  • 截屏2021-01-11 下午11.10.44
  • always:一有变更就写入,everysec:每秒写入一次,no:交由操作系统决定,通常缓存区被填满了才写入。

日志重写解决AOF文件大小不断增大问题

冗余命令可以精简,redis可以在后台重建AOF文件

  • 调用fork,创建一个子进程

  • 子进程把新的AOF文件写入临时文件,不依赖原来的AOF文件

  • 主进程持续将新的变动同时写入内存和原来的AOF里

  • 主进程获取子进程重写AOF完成信号,往新的AOF同步增量变动

  • 使用新的AOF文件替换掉原来的AOF文件

RDB和AOF的优缺点

  • RDB优点:

    • 全量数据快照,文件小,恢复快
  • RDB缺点:

    • 无法保存最近一次快照之后的数据
  • AOF优点:

    • 可读性高,适合保存增量数据,数据不易丢失
  • AOF缺点:

    • 文件体积大,恢复时间长

RDB-AOF混合持久化方式

截屏2021-01-11 下午11.31.38

AOF持久化和RDB持久化混合在一起使用。混合产生的文件有一半是AOF持久化文件,一半是RDB持久化文件。

混合持久化是AOF重写的优化。AOF重写是基于数据库的,会根据数据库状态产生的命令文件保存到AOF文件,之后追加新命令。
混合持久化则是在AOF重写时,直接用类似RDB的方式把数据库的状态(也就是现有的数据)保存起来,之后在尾部追加重写缓冲池的命令,这样生成的持久化文件既包括RDB文件格式数据,也包含AOF文件格式的命令,因此称为混合持久化。

  • BGSAVE做镜像全量持久化,AOF做增量持久化