欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

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

发布时间:2024/3/13 数据库 70 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Redis持久化中的AOF(Append Only File)持久化 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • Redis持久化中的AOF(Append Only File)持久化
      • 开启aof持久化
      • aof持久化的时候appendonly.aof持久化文件是什么时候生成的?
      • appendonly.aof文件中的数据是什么时候怎样恢复到redis数据库中的?
      • 怎样把appendonly.aof持久化文件里面的数据恢复到redis数据库中?
      • 使用redis-check-aof工具校验appendonly.aof持久化文件中的内容
      • aof持久化的时候缓存中的内容同步到硬盘的三种方式
      • 在什么情况下redis数据库中写的命令可以追加到appendonly.aof文件中?
      • aof持久化的优点和缺点

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持久化。

总结

以上是生活随笔为你收集整理的Redis持久化中的AOF(Append Only File)持久化的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。