您的位置:首页 > 数据库 > Redis

Redis持久化-AOF方式

2020-08-15 18:02 597 查看

AOF以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区,然后根据对应策略写入硬盘(appendfsync)。

1、AOF触发方式

手动触发
一般是直接cmd命令操作。
  使用bgrewriteaof命令:Redis主进程fork子进程来执行AOF重写,这个子进程创建新的AOF文件来存储重写结果,防止影响旧文件。因为fork采用了写时复制机制,子进程不能访问在其被创建出来之后产生的新数据。Redis使用“AOF重写缓冲区”保存这部分新数据,最后父进程将AOF重写缓冲区的数据写入新的AOF文件中然后使用新AOF文件替换老文件。
自动触发
一般是在redis.conf文件配置。

####### appendonly:是否打开AOF持久化功能
appendonly no
####### appendfilename:AOF文件名称
appendfilename "appendonly.aof"
####### appendfsync:同步频率
always:命令写入aof缓冲区后,每一次写入都需要同步,直到写入磁盘(阻塞,系统调用fsync)结束后返回。显然和Redis高性能背道而驰,不建议配置
everysec:命令写入aof缓冲区后,在写入系统缓冲区直接返回(系统调用write),然后有专门线程每秒执行写入磁盘(阻塞,系统调用fsync)后返回
no:命令写入aof缓冲区后,在写入系统缓冲区直接返回(系统调用write)。之后写入磁盘(阻塞,系统调用fsync)的操作由操作系统负责,通常最长30s
appendfsync everysec
no-appendfsync-on-rewrite no
####### auto-aof-rewrite-percentage:Redis记录最近的一次AOF操作的文件大小,如果当前AOF文件大小增长超过这个百分比则触发一次重写,默认100
auto-aof-rewrite-percentage 100
####### auto-aof-rewrite-min-size:如果文件大小小于此值不会触发AOF,默认64MB
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no

2、AOF保存过程

1)所有的append写入命令会追加到aof_buf【AOF缓冲区】中。
2)AOF缓冲区根据对应的策略向硬盘做sync同步操作。
3)随着AOF文件越来越大,需要定期对AOF文件进行重写【对同一个key的操作,会进行合并命令】,达到压缩的目的。
4)当Redis服务器重启时,可以加载AOF文件进行数据恢复。

3、AOF优缺点

优点:
做到最多丢失1-2s内的数据(最多丢失2s数据,因为AOF追加阻塞)
缺点:
AOF文件比RDB文件大
可能导致追加阻塞

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: