Redis 持久化-AOF方式

AOF方式

当使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程中止导致的数据丢失。AOF可以将Redis执行的每一条命令追加到硬盘文件中,这一过程会降低Redis的性能,但是大部分情况下,这个影响是可以接受的,另外使用较快的硬盘可以AOF的性能。

开启AOF

默认情况下Redis是没有开启AOF(append only file)方式的持久化, 可以通过appendonly参数启用:appendonly yes,AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的, 默认的文件名是appendonly.aof, 可以通过appendfilename参数修改: appendfilename appendonly.aof

AOF实现

AOF文件的内容是Redis客户端向Redis发送的原始通信协议的内容,随着执行命令越来越多,AOF文件的大小也越来越大,即使内存中的数据没有多少,故我们希望Redis自动优化AOF文件,每当达到一定条件时,Redis就会重写AOF文件,这个条件可以在配置文件中设置:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

auto-aof-rewrite-percentage这个参数是指当前的AOF文件大小超过上一次重写的AOF文件大小的百分之多少时会再次进行重写, 如果之前没有进行重写,则以启动时的AOF文件大小为依据。auto-aof-rewrite-min-size参数限制了允许重写最小AOF文件的大小

除了自动重写外,还有bgrewriteaof命令手动执行AOF重写。重写的过程只和内存的数据有关,和之前的AOF文件无关,这和RDB很相似,但二者的文件格式完全不同。
在启动Redis会逐个执行AOF文件中的命令来将硬盘的数据载入到内存中,载入的速度相对RDB较慢些。

同步磁盘数据

虽然每次执行更改数据库内容操作时, AOF都会将命令写入到AOF文件中, 但是由于操作系统的缓存机制,数据并没有真正写入到磁盘,而是进入到磁盘的缓存。默认情况下系统会每30秒执行一次同步操作,将硬盘的缓存内容真正写入到磁盘,若在这30秒过程中由于系统异常退出则会导致硬盘缓存数据丢失。这就需要Redis在写入AOF文件后主动将系统缓存内容同步到硬盘中。在Redis中可以通过appendfsync参数设置同步时机。

#appendfsync always
appendfsync everysec
#appendfsync no

默认采取everysec规则,即每秒执行一次同步操作。always表示每次执行都执行同步,这是最安全也是最慢的方式。no表示从不主动同步,完全交由操作系统来做(即妹30秒一次),这是最快但是最不安全的方式。
Redis允许同时开启AOF和RDB方式,即保证数据的安全,又进行备份等操作十分容易。此时重启Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少。

posted @ 2020-08-14 16:36  phper-liunian  阅读(201)  评论(0编辑  收藏  举报