4、Redis持久化之AOF

Redis持久化之AOF

1、什么是AOF

AOF,Append Only File,是指Redis将每一次写操作都以日志的形式记录到一个AOF文件中的持久化技术。当需要恢复内存数据时,将这些写操作重新执行一次,便会恢复到之前的内存数据状态。

2、AOF基础配置

2.1、AOF的开启

默认是关闭。注意当我们同时开启RDB和AOF时,redis会加载AOF文件将数据初始化到内存。

appendonly no

2.2、AOF的文件组及目录

Redis7在这里做了重大的变化,原来 只有一个appendonly.aof文件,现在有3个文件:

  • 基本文件:可以是RDB格式也可以是AOF格式(默认是RDB格式)。其存放的内容是由RDB转为AOF当时内存的快照数据。这个文件可以有多个

  • 增量文件:以操作日志的形式 记录 转为AOF后的写入操作。这个文件可以有多个。

  • 清单文件:用于维护AOF文件的创建顺序,保障激活时的应用顺序,该文件只有一个。

AOF相关文件名的前缀

appendfilename “appendonly.aof”

AOF相关文件存储的路径

appenddirname “appendonlydir”

3、Redis协议

​ 增量文件扩展名为.aof,采用AOF格式。AOF格式其实就是Redis通讯协议格式,AOF持久化文件本质就是基于Redis通讯协议的文本,将命令以纯文本的方式写入到文件中。

​ Redis协议规定,Redis文本是以行来划分,每行以\r\n行结束。每一行的有一个消息头,以表示消息类型。消息头由六种不同的符号表示,其意义如下:

  • (+)表示一个正确的状态信息

  • (-)表示一个错误消息

  • (*)表示消息体总共有多少行,不包括当前行。

  • ($)表示下一行消息数据的长度,不包括换行符长度\r\n。

  • (:)表示返回一个数指

4、Rewrite机制

​ 随着使用时间的推移,AOF文件会越来越大。为了防止AOF文件由于太大而占用大量的磁盘空间,减低性能,Redis引入了Rewrite机制来对AOF文件进行压缩。

4.1、何为rewrite

​ 所谓rewrite其实就是对AOF文件进行重写整理。当Rewrite开启后,主进程redis-server创建出一个子进程bgrewrite,由该子进程完成rewrite过程。其首先对现有aof文件进行rewrite计算,将计算结果保存到一个临时文件,写入完毕后,再将该临时文件覆盖原来的文件。

4.2Rewrite计算

rewrite计算遵循以下策略:

  • 读操作命令不写人文件

  • 无效命令不写入文件

  • 过期数据不写入文件

  • 多条命令合并写入文件

5、AOF优化配置

我们知道,数据写操作都是存储到内存中的。AOF想要将数据持久化到磁盘文件中那么就要用到这个命令;

appendfsync  everysec

appendfsync有三种模式:

  • always:每一次写操作都将数据写到磁盘,很慢,但是基本不会丢失数据。

  • everyec:每秒同步一次数据到磁盘,默认的策略。

  • no: 从不主动地同步数据到磁盘,也就是说这个权力交给操作系统,让操作系统做决定什么时候(每30s)将数据同步到磁盘。效率最高。

这个配置项默认为no,表示在进行重写操作时,不会禁用appendfsync。但是当写操作数据量很大的时候可能会造成阻塞。如果将其改为yes,那么就和上面一个配置项设置为no的效果是一样的。

no-appendfsync-on-rewrite no

当bgrewriteaof在执行过程也是先将rewrite计算的结果写入到了aof_rewrite_aof缓存中,然后当缓存中数据达到一定量后就会调用发sync()进行刷盘操作,即数据同步,将数据写入到临时文件。该属性用于控制fsync()每次刷盘的数据量最大不超过4MB。

aof-save-incremental-fsync yes

redis支持记录时间戳数据在AOF文件中,目的是为了方便用户通过时间戳去恢复数据。默认是no

aof-timestamp-enabled no

这个属性用于aof文件加载时出现文件截断,当被设置为yes时,redis加载aof文件出现截断那么redis会发出这个日志信息给用户。如果设置为no的话,redis就会抛出错误并停止运行,直到用户将aof文件修复。

aof-load-truncated yes

6、修复AOF文件

当AOF损坏时,我们可以通过redis-check-aof来进行修复。当然也可以进行检查aof文件。

检查aof文件:

redis-check-aof  待检测aof文件

修复aof文件:

redis-check-aof --fix 待修复文件

7、AOF执行过程

AOF执行过程:

  1. Redis接收到的写操作命令并不是直接追加到磁盘的AOF文件的,而是将每一条写命令按照redis通讯协议格式暂时添加到AOF缓冲区aof_buf。
  2. 根据设置的数据同步策略,当同步条件满足时,再将缓冲区中的数据一次性写入磁盘的AOF文件,以减少磁盘IO,提高性能。
  3. 当磁盘的AOF文件大小达到了rewrite条件时,redis-server主进程会fork出一个子进程bgrewriteaof,由该子进程完成rewrite过程。
  4. 子进程bgrewrite首先对该磁盘AOF文件进行rewrite计算,将计算结果写入到一个临时文件,全部写入完毕后,再覆盖原来的AOF文件。
  5. 如果在rewrite过程中存在写操作,那么这些数据会被暂时写入到aof_rewrite_buf缓冲区,等将全部rewrite计算结果写入到临时文件后,会先将aof_rewrite_buf中的数据写入到临时文件,然后临时文件再覆盖原来的AOF文件。
  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值