Redis持久化AOF
介绍
与RDB存储某个时刻的快照不同,AOF持久化方式会记录客户端对服务器的每一次写操作命令,并将这些写操作以Redis协议追加保存到以aof为后缀的文件,在Redis服务器重启时,会加载并运行aof文件的命令,以达到恢复数据的目的。
开启方式
Redis默认不开启AOF持久化方式,需要在配置文件中开启并进行更详细的配置。
# 开启aof机制
appendonly yes
# aof文件名
appendfilename "appendonly.aof"
# 写入策略,always表示每个写操作都保存到aof文件中,也可以是everysec或no
appendfsync always
# 默认不重写aof文件
no-appendfsync-on-rewrite no
# 保存目录
dir ~/redis/
重要配置项说明
appendfsync 写入策略
我们可以通过appendfsync
选项来指定写入策略,有以下三个选项。
- always
客户端的每一个写操作都保存到aof文件中,这种策略很安全,但是每个写操作都有io,所以比较慢。 - everysec
appendfsync
的默认写入策略,每秒写入一次aof文件,因此最多可能丢失1s的数据。 - no
Redis服务器不负责写入aof,而是交由操作系统来处理什么时候写入aof文件。更快,但也是最不安全的选择,不推荐使用。
no-appendfsync-on-rewrite aof文件重写
AOF将客户端的每一个写操作都追加到aof文件末尾,比如对一个key多次执行incr命令,这时候aof保存每一次命令到aof中,文件将会变得非常大。
aof文件大,那么加载aof文件恢复数据时就会非常慢。为了解决这个问题,Redis支持aof文件重写,通过重写aof,可以生成一个恢复当前数据的最少命令集。
aof文件损坏
在写入aof日志文件时,如果Redis服务器宕机,则aof文件会出现格式错误,在重启Redis时,Redis服务器会拒绝载入这个aof文件,可以通过一下步骤修复aof文件
- 备份现在的aof文件
- 使用redis-check-aof命令修复aof文件
$ redis-check-aof -fix file.aof