一文了解:Redis的AOF持久化
2019-08-12 16:37
1286 查看
Redis的AOF持久化
每当Redis-Server接收到写数据时,就把命令以文本形式追加到AOF文件里,当重启Redis服务时,AOF文件里的命令会被重新执行一次,重新恢复数据。当AOF过大时将重写AOF文件。
工作原理
> lpush list 1 2 3 4 (integer) 4 127.0.0.1:6379> lrange list 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 127.0.0.1:6379> lpop list "4" 127.0.0.1:6379> lrange list 0 -1 1) "3" 2) "2" 3) "1"
appendonly.aof文件中
*2 $6 SELECT $1 0 *6 $5 lpush $4 list $1 1 $1 2 $1 3 $1 4 *2 $4 lpop $4 list
可以看到上面的示例中写操作有lpush和lpop命令,在AOF文件中存在lpush和lpop。SELECT命令为AOF程序自动加上的选择数据库。
AOF命令写入的内容为文本协议格式,如:命令lpush list 1 2 3 4 的文本形式为"*6\r\n$5\r\nlpushr\n$4r\nlist\r\n$1\r\n1$1\r\n2$1\r\n3$1\r\n4\r\n"。将文本内容追加到aof_buf(缓冲区)中,AOF缓冲区根据相应的策略同步写入AOF文件中,当AOF文件越来越大时,将AOF文件重写。
启动AOF持久化
在redis.conf文件中
appendonly no #写成yes,打开AOF持久化
AOF写入频率
# appendfsync always appendfsync everysec # 默认 # appendfsync no
- alaws:总是同步到AOF文件,每一个命令都写入,安全,速度慢
- everysec:每秒写入一次,安全性好,最多丢失1秒钟的数据
- no:写入AOF文件工作交给操作系统,由操作系统写入AOF文件,安全性一般
文件
aof文件目录通过RDB文件目录,他们共享同一个目录
dir ./ appendfilename "appendonly.aof"
通过
config set dir {newDir}动态修改dir配置
通过
config set dbfilename {appendfilename}动态修改AOF文件名称
重写
AOF文件过大时,Redis将fork()一个子进程对内存数据进行比那里逆化成Redis命令,序列化文本格式后写入到新的AOF文件中。然后将重写时发生的增量AOF文件追加到新的AOF文件中,最后替换旧的AOF文件。
自动重写
auto-aof-rewrite-percentage 100 # 比上次重写时文件增大了100%就重写AOF文件 auto-aof-rewrite-min-size 64mb # AOF文件至少超过为64M时重写AOF文件
自动重写必须满足:当前AOF文件大小 > auto-aof-rewrite-min-size &&(当前文件AOF文件大小减去上次重写时AOF文件大小)除以 上次重写时AOF文件大小 = auto-aof-rewrite-percentage
手动重写
> bgrewriteaof Background append only file rewriting started
优缺点
优点
- 比RDB文件可靠,everysec模式下只丢1秒数据。
- AOF文件为纯文本文件。文件协议格式容易恢复成Redis命令。
- AOF文件太大会进行自动重写。
缺点
- 同等数据下,比RDB文件大。
- 同步过程中Redis主进程会被阻塞,everysec是个折中方案。
数据恢复
Redis读取AOF文件数据还原过程
- 创建一个不带网络的客户端
- 读取AOF文件内容,还原成命令
- 将命令在1中的客户端执行
- 重复2,3的过程
结语
本人深知水平有限,欢迎指正本文错误之处。
相关文章推荐
- redis持久化AOF与RDB配置
- Redis之aof日志持久化
- 文件的写入和同步(对redis的AOF持久化理解)
- Redis---redis的持久化(RDB和AOF方式)
- Redis的AOF持久化-Redis学习笔记四
- redis aof持久化遇到的Can't open the append-only file Permission denied
- Redis 持久化之RDB和AOF
- redis的rdb和aof持久化机制
- 12 redis之aof日志持久化
- Redis 持久化之AOF
- Redis持久化方式AOF和RDB
- Redis持久化方式RBD和AOF对比
- Redis学习——Redis持久化之AOF备份方式保存数据
- Redis的持久化-AOF
- NoSQL——Redis主从复制、RDB/AOF持久化、数据类型
- redis持久化RDB和AOF
- redis 持久化技术 之 aof
- Redis数据持久化-----RDB和AOF详解
- redis的 rdb 和 aof 持久化的区别
- Redis(13)--Redis的持久化之AOF方式