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数据到磁盘。保留的文件格式是不同的
发表回复