Redis持久化之AOF方式
Redis的RDB方式不能做到妙计持久化,但是AOF方式可以做到。如果数据比较重要,丢失会造成严重的后果,那么RDB方式明显不合适,要用到AOF的方式。aof方式和mysql的binlog日志有些像,都只记录新增、修改、删除的操作。不同的是,redis会每隔一段时间后,会对aof文件进行重写,降低aof文件的大小。
AOF工作流程
这里,为什么命令要先写入aof_buf,因为如果直接写入aof文件,那么性能就完全取决去硬盘的io性能。写入aof_buf是为了提高写入的性能。
配置
appendonly:是否开启aof持久化方式,默认是no。如想开启则改为yes。
dir:aof文件存放目录
appendfilename:aof文件名
appendfsync:aof同步方式,有三个值,分别如下:
-
always:每写入一个命令时就同步,数据的安全性最高,但性能差
-
everysec:每秒同步,默认的方式,性能高,安全性也还行
-
no:同步操作交给操作系统,数据的安全性最差。
auto-aof-rewrite-percentage 、auto-aof-rewrite-min-size 这两个配置是和aof重写机制相关的,只有同时满足这两个条件才会触发重写机制。
auto-aof-rewrite-min-size是表示重写时,文件大小必须必这个值要大,默认值是64mb
auto-aof-rewrite-percentage表示目前文件大小比上次重写后的文件大小大这么多才行。
AOF重写
redis的aof重写机制有手动触发和自动触发两种方式。手动触发即输入bgrewriteof命令。自动触发即满足上述所有的两个条件。
为什么重写能缩小文件体积,有几种情况:
-
过期的键及已删除的键将不会再记录
-
许多单个操作可以有一个操作来完成,比如lpush a、lpush b,重写后就是lpush a b.
下面看看aof重写流程

-
执行bgrewriteof命令
-
主进程fork出一个子进程
-
原有的aof机制继续运行,同时,也将新的命令写入到aof_rewrite_buf中
-
子进程生成新的aof文件
-
通知父进程,新的aof文件已经生成成功;将aof_rewrite_buf中的命令追加到新的aof文件中;用新的aof文件替换旧的aof文件。
-
完成以上步骤后,aof重写就完成了。
注意,如果一个服务器上面有多个redis服务,那么最好将他们重写的时间分隔开,防止io及cpu竞争过大。
您可能感兴趣的文章
- 12-22使用mysql记录从url返回的http GET请求数据操作
- 12-22详解sql中exists和in的语法与区别
- 12-22hive从mysql导入数据量变多的解决方案
- 12-22如何为PostgreSQL的表自动添加分区
- 12-22postgresql 实现得到时间对应周的周一案例
- 12-22sqoop export导出 map100% reduce0% 卡住的多种原因及解决
- 12-22mysql查询条件not in 和 in的区别及原因说明
- 12-22解决mysql使用not in 包含null值的问题
- 12-22解决从集合运算到mysql的not like找不出NULL的问题
- 12-22postgresql 实现多表关联删除


阅读排行
推荐教程
- 12-11mysql代码执行结构实例分析【顺序、分支、循环结构】
- 12-08添加mysql的用户名和密码是什么语句?
- 12-20PhpMyAdmin出现错误数据无法导出怎么办?
- 12-19Redis中实现查找某个值的范围
- 12-15浅析mysql迁移到clickhouse的5种方法
- 12-15CentOS7 64位下MySQL5.7安装与配置教程
- 12-14Mysql大型SQL文件快速恢复方案分享
- 12-14mysql 5.7.27 安装配置方法图文教程
- 12-13MySQL给新建用户并赋予权限最简单的方法
- 12-13关于MySQL索引的深入解析





