Redis AOF持久化
Posted 断水流大师兄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis AOF持久化相关的知识,希望对你有一定的参考价值。
Redis AOF 持久化
1、AOF持久化包含的命令:
1.1 SET
1.2 SADD(将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
。Redis2.4 版本以前,SADD只接受单个成员值。)(set add)
1.3 RPUSH (将一个或多个值插入到列表的尾部)
2、AOF持久化的实现:命令追加、文件写入、文件同步
2.1 追加到aof_buf缓冲区的末尾,协议格式:
2.1.1 文件头(和RDB文件头格式相同)
2.1.2 RDB格式的二进制数据段
2.1.3 AOF格式的文本数据段
2.2 文件写入:flushAppendOnlyFile() 将aof_buf缓冲区的内容写入到aof文件。
问:flushAppendOnlyFile的选项值 appendfsync包含了:
1)always,写入并同步。
2)everysec:写入,超过1秒再同步到aof文件,默认值。
3)写入,不同步。
这里的写入和同步是什么意思?
答:是操作系统的写入和同步,在调用write函数时,是先将内容写入数据缓冲区的,当缓冲区满或超过特定时限才会写入磁盘
2.3 AOF文件载入与数据还原
步骤:启动载入 -> 创建伪客户端(无网络链接)-> (1)从AOF取命令 -> (2)读取、发送并执行一条命令 -> 载入完成
注:上述步骤(1)和(2)是loop执行的
3、AOF 的重写
3.1 目的:解决AOF 文件体积膨胀
3.2 实现原理:创建新的AOF文件代替原有的AOF文件,替换过程剔除了冗余命
如将 RPUSH A + RPUSH B 两条命令 精简为 RPUSH A, B
3.3 aof_rewrite 函数 是下载所有redis db 数据的过程
3.4 同RDB持久化相同,AOF 重写过程也是fork子进程处理的
3.5 fork子进程处理重写时,主进程正常处理客户端命名(非阻塞)。
为保证数据一致性,当执行一个命令之后,会同时给AOF缓冲区(2.2所述)和AOF重新缓冲区(AOF重写启动时创建)发送命令。
重写结束时再将AOF缓冲区的命令写入新的AOF文件
4、问题:
4.1 RDB持久化 和 AOF持久化我们使用的是哪个?我们对redis的使用场景大部分都是缓存,对数据的安全性要求并不是很高,选 RDB
4.2 如果我们使用 AOF持久化,appendfsyc参数值该如何选?我觉得是everysec,在性能和数据安全上的取舍是中庸的
4.3 AOF的重写 和 RDB持久化很相似,都是下载redis db数据到磁盘。保存的文件格式是不同的
以上是关于Redis AOF持久化的主要内容,如果未能解决你的问题,请参考以下文章
Redis---- Redis的持久化机制RDB和AOF原理