redis持久化之AOF

redis持久化之AOF

之前其实介绍过redis另一种持久化方式rdb了,这里我讲述一下我所了解的AOF方式
原理:aof是通过日志的形式,将所有的写操作记录下来。注意只记录写操作,不会去记录读操作。重启之后,会读取文件重新构建数据。他的构建过程,是根据日志将所有的指令全部执行一次完成数据恢复。默认保存的文件是appendonly.aof文件

AOF也是在配置文件里面开启(可以搜索appendonly 找到配置的地方)
redis持久化之AOF
将no改为yes 默认文件名字建议不要改

redis持久化之AOF
这个也是触发aof的一个机制
always 是每次数据变化都会记录下来,并同步到磁盘
everysec 是每秒记录,并同步到磁盘
no,写入aof文件,不会同步

下面我实际操作一下,截图解释一下
redis持久化之AOF
有些人开启了之后可能会找不到aof文件,这时候执行一个命令他就会出现啦
redis-cli set config appendonly yes
redis持久化之AOF
下面随便输入几个值看一下
redis持久化之AOF
此时查看aof文件的话就会发现里面已经有记录了
redis持久化之AOF
这时候进去我们手动清空关闭一下redis
flushall shutdown

之后我们重启redis 查看一下数据有没有恢复!
redis持久化之AOF
会发现数据并没有恢复!!!!!!!
查看appendonly.aof文件看一下
redis持久化之AOF
发现最后有一个flushall也记录下来了,直接删掉就行了在运行就好了
同理推测。。就是文件里有其他不是写操作的数据的时候会加载失败,但是他会有一个check-appendonly.aof文件自己恢复的,还挺人性化
redis持久化之AOF
所以AOF对比RDB优势在于 同步持久化,他有每秒和每次同步
但是AOF文件远远大于RDB文件,恢复速度慢,运行效率也相对慢

但是这个问题redis也有相应的解决办法 rewrite
他其实是增加了重写机制,当文件超过所定的阀值的时候,redis就会启动aof文件的内容压缩,只保留可以恢复数据的最小指令集,命令是bgrewriteaof
原理:fork一个新的进程将文件重写(跟rdb一样也是先写临时文件,在rename),遍历新进程的内存中的数据,每条记录都有一个set,将内存中的数据库内容用命令的方式重写一个新的aof文件。
触发机制:会记录上次的重写的aof文件大小,默认配置是当aof文件大小是上次rewrite后大小的一倍,且文件大于64M的时候触发
不过注意(公司里肯定不可能是64M 一般都是好几个G)

这次关于aof的介绍完了,希望对大家有所帮助。
如果大家有想了解的,也可以评论,我会更新给大家看。
谢谢