关于redis的AOF

关于redis的AOF

   张吉吉     2019年12月19日 01:21     1309    

1、关于AOF

AOF持久化会将执行的写命令写入AOF文件末尾,用来记录数据发生的变化。当执行一遍AOF的命令,就能恢复数据。

这种持久化的方式,就是为了弥补RDB的不足,避免没有备份的数据丢失。

每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

 

2、配置文件

(1)appendonly yes

redis默认的是关闭AOF的。需要改为yes来启动AOF

 

(2)appendfilename "appendonly.aof"

AOF的文件名

 

(3)appendfsync everysec

appendfsync有三种模式always、everysec、no

no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快,但是不太安全;

always表示每次写入都执行fsync,以保证数据同步到磁盘,效率很低;

everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。通常选择 everysec ,兼顾安全性和效率。

 

重写机制:

(4)no-appendfsync-on-rewrite no

是否在执行重写时不同步数据到AOF文件

这里的 yes,就是执行重写时不同步数据到AOF文件

 

(5)auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。

设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写

 

(6)aof-load-truncated yes

aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。

 

 

(7)aof-use-rdb-preamble yes

RDB和AOF的混合持久化

 

3、根据AOF文件恢复数据

如果想要恢复的话,只需要将aof文件复制到安装目录下,在重启的时候如果有aof文件就会读取aof文件,忽略RDB文件。

如果想要使用命令区恢复的话就使用命令redis-check-aof --fix appendonly.aof进行恢复。

 

4、重写

重写定义:AOF采用文件追加的方式持久化数据,所以文件会越来越大,为了避免这种情况发生,增加了重写机制当AOF文件的大小超过了配置所设置的阙值时,Redis就会启动AOF文件压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

触发机制:Redis会记录上次重写时的AOF文件大小,默认配置时当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

 


文章评论

0

其他文章