03.AOF持久化机制配置与工作流程
一、AOF持久化的配置
配置文件redis.conf,AOF持久化默认是关闭的,默认是打开RDB持久化
appendonly yes
二、工作流程:
打开AOF持久化机制之后,redis每次接收到一条写命令,就会写入日志文件中,当然是先写入os cache的,然后每隔一定时间再fsync一下
可以配置AOF的fsync策略,有三种策略可以选择,
- always: 每次写入一条数据,立即将这个数据对应的写日志fsync到磁盘上去,优点是保证数据都不会丢,但是性能非常非常差,吞吐量很低
- everysec: 每秒将os cache中的数据fsync到磁盘,生产基本就用这个,性能很高,QPS还是可以上万的
- no: 仅仅redis只负责将数据写入os cache,后面os自己会时不时有自己的策略将数据刷入磁盘,这就不可控了
三、AOF持久化的数据恢复实验
- 先仅仅打开RDB,写入一些数据,然后kill -9杀掉redis进程,接着重启redis,发现数据没了,因为RDB快照还没生成
- 打开AOF的开关,启用AOF持久化
- 写入一些数据,我们会发现AOF文件中有了对应的写入命令
- kill -9杀掉redis进程,重新启动redis进程,发现数据被恢复回来了,就是从AOF文件中恢复回来的。
- redis进程启动的时候,直接就会从appendonly.aof中加载所有的日志,把内存中的数据恢复回来
总结:所以在实际生产环境中必须开启AOF避免数据丢失。而RDB主要做冷备用的。
四、AOF rewrite
定义
redis存在被用户删除,自动过期删除,淘汰策略等等。但redis会不断将写命令写入到同一个AOF,特别是频繁修改数据,AOF文件就会不断的膨胀变大 所以AOF会自动在后台每隔一定时间做rewrite操作
配置
在redis.conf中,可以配置rewrite策略
#当前 AOF 文件大小相对于上次重写完的 AOF size的增长比例,设置为0时不开启 auto-aof-rewrite-percentage 100 #当前 AOF 文件大小超过最小重写尺寸 auto-aof-rewrite-min-size 64mb
表示当最小rewrite的size是64mb,这是前提。当前AOF文件大小超过上一次AOF100%,则增长比例为100%时,自动触发rewrite机制。
- 举个栗子:
上一次AOF rewrite后size是128mb,然后redis继续写AOF的日志, 但size达到256mb的时候,超过了之前的100%,并且256mb > 64mb,就会去触发一次rewrite
流程:
(1)redis fork一个子进程 (2)子进程基于当前内存中的数据,构建日志,开始往一个新的临时的AOF文件中写入日志 (3)redis主进程,接收到client新的写操作之后,在内存中写入日志,同时新的日志也继续写入旧的AOF文件 (4)子进程写完新的日志文件之后,redis主进程将内存中的新日志再次追加到新的AOF文件中 (5)用新的日志文件替换掉旧的日志文件
五、AOF破损文件的修复
如果redis在append数据到AOF文件时,机器宕机了,可能会导致AOF文件破损。可以使用下面的命令修复
redis-check-aof --fix
六、AOF和RDB同时工作
- 如果RDB在执行snapshotting操作,那么redis不会执行AOF rewrite; 如果redis在执行AOF rewrite,那么就不会执行RDB snapshotting
- 如果RDB在执行snapshotting,此时用户执行BGREWRITEAOF命令,那么等RDB快照生成之后,才会去执行AOF rewrite
- 同时有RDB snapshot文件和AOF日志文件,那么redis重启的时候,会优先使用AOF进行数据恢复,因为其中的日志更完整
小tip:QPS,每秒钟的请求数量 mysql -> 内存策略,大量磁盘,QPS到多少,一两k。 redis -> 内存,磁盘持久化,QPS到多少,单机,一般来说,上万QPS没问题
hi~我是Mirror,一个为了自由安逸的未来而不断前进的的程序员。 如果你觉得文章对你有一点点帮助,一个小小赞,便是对我的认可,如果有不足之处,也欢迎各位指正。
- RDB与AOF持久化配置与工作流程
- Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题,以及实现hadoo
- struts1的基本配置和工作流程
- 7.hdfs工作流程及机制
- SVN,CVS,VSS工作机制比较, SVN安装及配置
- Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)
- acegi流程分析之一《Acegi 中的HttpSessionEvent 监听机制 窥视Acegi的 工作流程》
- Struts2学习之1(Struts2的工作流程,动作类的编写,struts.xml配置文件的编写)
- ecshop 工作流程加载配置介绍
- acegi流程分析之一《Acegi 中的HttpSessionEvent 监听机制 窥视Acegi的 工作流程》 (zz)
- 构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)...
- springmvc核心配置文件以及spirngmvc工作流程(一)
- 802.1X协议的工作机制流程详解
- 构建高性能.NET应用之配置高可用IIS服务器-第五篇 IIS常见问题之:工作进程回收机制(中)
- SpringMVC简介、工作流程、配置
- SpringMvc工作流程及常用配置
- 局域网工作机制和网络配置(1)
- 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程
- MapReduce工作机制和流程
- struts1 struts2 spring 各自的运行机制,工作流程(整理)