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,一个为了自由安逸的未来而不断前进的的程序员。
如果你觉得文章对你有一点点帮助,一个小小赞,便是对我的认可,如果有不足之处,也欢迎各位指正。
03.AOF持久化机制配置与工作流程的更多相关文章
- Redis 学习笔记(四)RDB 和 AOF 持久化机制
一.Redis 持久化简介 Redis 的持久化功能是区别于 Memcached 显著特性,数据持久化可以保证系统在发生宕机和重启后数据不会丢失,对于 redis 这种存储在内存中的数据库显得尤为重要 ...
- 02.RDB持久化配置与工作流程
一.如何配置RDB持久化机制 配置文件redis.conf save 60 1000 表示每隔60s,检查如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redi ...
- GIT使用—安装配置及工作流程
一.Git 与 SVN 区别 GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 1.GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CV ...
- Git 安装配置及工作流程
在使用Git前我们需要先安装 Git.Git 目前支持 Linux/Unix.Solaris.Mac和 Windows 平台上运行. Git 各平台安装包下载地址为:http://git-scm.co ...
- redis的rdb与aof持久化机制
Redis提供了两种持久化方案:RDB持久化和AOF持久化,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化 RDB持久化是通过快照的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘 ...
- DHCP(动态主机配置协议)工作流程
一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...
- 分析RedisRDB和AOF两种持久化机制的工作原理及优劣势
一.RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only(追加)的模式写入一个日志文件中,在redi ...
- 部署Redis4.x单机版及配置RDB和AOF持久化
一.环境及软件 OS soft version CentOS 7.5 redis-4.0.12(目前是4.x最新) 二.下载及编译Redis [root@localhost ~]# wget h ...
- 9. 图解分析Redis的RDB和AOF两种持久化机制的原理
1.RDB和AOF两种持久化机制的介绍 2.RDB持久化机制的优点3.RDB持久化机制的缺点4.AOF持久化机制的优点5.AOF持久化机制的缺点6.RDB和AOF到底该如何选择 我们已经知道对于一个企 ...
随机推荐
- 一些html基础概念
不做前端好多年,之所以突然写这个,是因为最近在做一个监控平台,需要一点web前端开发,想着顺便做了,但是由于长时间没接触前端导致一些基础知识的遗忘,所以在此记录下备忘,没有啥高深的东西,完全是为了对抗 ...
- mysql启动报错,The server quit without updating PID file
环境 MacOS 10.12.2 mysql Ver 14.14 Distrib 5.7.16, for osx10.11 (x86_64) using EditLine wrapper (该部分可跳 ...
- hibernate自动创建表报错,提示不存在
报错:ERROR: HHH000299: Could not complete schema update 或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...
- Jmeter(十九) - 从入门到精通 - JMeter监听器 -上篇(详解教程)
1.简介 监听器用来监听及显示JMeter取样器测试结果,能够以树.表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式.CSV格式.默认情况下,测 ...
- vue中一些常见的面试题
前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 内容 1,说一下vue中的指令 答: ①,v-html:主要用来渲染html节点,其作用与原生的innerHtml基本一致 ②,v-text:主要用来 ...
- 5、抽象工厂 abstract factory 将关联组件组成产品 创建型模式
趁热打铁,紧跟着上一节的工厂方法模式.这一节介绍一下抽象工厂模式,以及分析俩个模式的不同 1.何为抽象模式? 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他 ...
- Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable
Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...
- Java进阶知识
01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 第一章 Object类 1. ...
- 什么是XML? 什么是DTD?
XML XML称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的. W3C ...
- java 多态一
一 多态的概述 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学 生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个事物的多种形态.如Studen ...