Redis持久化中的AOF(Append Only File)持久化

Redis持久化中的AOF(Append Only File)持久化

开启aof持久化

在这里插入图片描述
从上图中可以看出aof持久化是追加模式,也就是如果使用的是aof持久化,那么在redis写的所有的命令都会被追加到appendonly.aof持久化文件中;aof持久化方式不像rdb持久化,因为rdb持久化不会在dump.rdb文件中追加内容,它是先对redis此时16个数据库的状态进行一次快照操作,然后生成一个持久化文件dump.rdb,然后用后面生成的这个dump.rdb文件直接替换掉上一个dump.rdb文件;
注意:aof持久化文件appendonly.aof中存储的都是redis数据库中已经执行过得命令,但是rdb持久化文件dump.rdb中存储的是redis数据库中的内容。

在这里插入图片描述

默认是不开启的,需要手动进行配置。我们只需要将appendonly改为yes就开启了aof,如下图:

在这里插入图片描述

aof持久化的时候appendonly.aof持久化文件是什么时候生成的?

如果用的是aof持久化,那么redis数据库中所有的新的写的信息都会追加到appendonly.aof文件当中,如下图:

在这里插入图片描述

但是这个appendonly.aof文件是在什么时候生成的呢?请看下图:

在这里插入图片描述

也就是说在只要你用的是aof持久化方式,那么在启动redis服务器的时候,就会自动生成appendonly.aof持久化文件。

appendonly.aof文件中的数据是什么时候怎样恢复到redis数据库中的?

在redis服务器启动的时候,appendonly.aof文件中的数据会恢复到redis数据库中,但是要注意的一点是redis配置文件中的appendonly的值必须要设置成yes,表示的是redis会使用aof持久化,reids默认情况下使用的是rdb持久化,在redis服务启动的时候会使用dump.rdb持久化文件恢复数据,所以如果想要使用aof持久化,通过appendonly.aof文件恢复redis数据库里面的数据,那么redis配置文件中的appendonly的值一定要设置成是yes,如下图:

在这里插入图片描述

怎样把appendonly.aof持久化文件里面的数据恢复到redis数据库中?

其实aof持久化恢复appendonly.aof文件中的数据与rdb持久化恢复dump.rdb里面的数据过程都类似,就是先开启redis配置文件中对aof持久化的支持,即把appendonly的值设置成是yes,然后把appendonly.aof这个文件放到redis-cli的同级目录下,然后断开连接,重启redis服务,重新连接redis客户端,这样就可以把appendonly.aof文件中的内容给恢复了,如下图:

在这里插入图片描述

使用redis-check-aof工具校验appendonly.aof持久化文件中的内容

appendonly.aof文件中记录了我们所有的写操作,如果appendonly.aof文件中有错误,那么这个时候redis是启动不起来的。我们需要修复这个aof文件,redis给我们提供了这样一个工具,redis-check-aof,对应的命令是redis-check-aof --fix appendonly.aof,假设appendonly.aof持久化文件中有一些不规范的内容,所谓的不规范也就是不属于redis数据库的命令,因为持久化文件appendonly.aof中存放的全是命令,可以通过redis-check-aof这个校验工具去删除持久化文件appendonly.aof中的不规范的数据,如下图:

在这里插入图片描述

假设不对上面的appendonly.aof文件更改,那么当连接redis服务器的时候就会出错,如下图:

在这里插入图片描述

然后可以使用redis-check-aof去校验appendonly.aof文件,如下图:

在这里插入图片描述

appendonly.aof文件校验成功之后,可以再次查看appendonly.aof文件中的内容,和没校验之前做一次比较,如下图:

在这里插入图片描述

最后重启一下redis服务,看看此时redis客户端能不能连接成功,如下图:

在这里插入图片描述

aof持久化的时候缓存中的内容同步到硬盘的三种方式

在使用aof持久化的时候,在redis数据库中写的命令并不是立刻被同步到持久化文件appendonly.aof中的,而是先把命令保存到缓存中,然后再把缓存中的数据同步到持久化文件appendonly.aof中的,这里面牵涉到了三种把缓存中的数据同步到持久化文件appendonly.aof中的机制,如下图:

在这里插入图片描述

默认使用的方式是appendfsync everysec;

在什么情况下redis数据库中写的命令可以追加到appendonly.aof文件中?

我在验证在redis数据库中写的命令都可以追加到appendonly.aof文件中时出现了一个问题,就是我在redis中执行的写的命令,在一些情况下可以保存到appendonly.aof文件中,而在另一些情况下不能够保存到appendonly.aof文件中,这是为什么呢?

这是因为只有当第一次重新连接redis-cli客户端的时候,在redis中写的所有的命令才能够追加到原来的appendonly.aof文件中,如果此时从redis-cli客户端退出,但是却不关闭redis-cli客户端然后重新打开redis-server服务,那么当你再次连接redis客户端的时候,你在redis数据库中的操作命令是不能够被追加到appendonly.aof文件中的,这两种情况一种是在redis数据库中写的命令可以追加到appendonly.aof持久化文件中,另外一种是在redis数据库中写的命令不能追加到appendonly.aof持久化文件中,先来看一下在redis数据库中写的命令能够追加到appendonly.aof持久化文件中的情况,如下图:

在这里插入图片描述

在这里插入图片描述

再来看一下在redis数据库中写的命令不能追加到appendonly.aof持久化文件中的情况,如下图:

在这里插入图片描述

在这里插入图片描述

aof持久化的优点和缺点

优点:每一次修改都同步,文件的完整性会更加好。

缺点:如果每秒同步一次,可能会丢失一秒的数据。aof的运行效率比rdb要慢,所以我们redis默认的配置是rdb持久化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值