### 概述
把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。
### 开启
redis.conf文件下 :
1. appendonly : yes //表示开启AOF方式
2. appendfilename : 文件名 //指定AOF持久化名称
![](https://box.kancloud.cn/d4966738300ca5f6b708b4e7e03259d4_879x109.png)
### 触发条件
1. appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 .
![](https://img.kancloud.cn/e2/3a/e23a5ffc8edd6c7f3d3712109aebf942_3144x1278.png)
2. appendfsync everysec(默认) //默认就是这种,每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐 .
![](https://img.kancloud.cn/ee/1a/ee1a26d896b98fec08c36419732af369_3070x848.png)
3. appendfsync no //完全依赖操作系统,性能最好,持久化没保证 .
![](https://img.kancloud.cn/46/a7/46a7d99c074dede0267fdc9f17b449ff_3068x808.png)
![](https://img.kancloud.cn/fc/ba/fcba8ec2138d5bda19f4be019c932d18_2868x948.png)
**需要注意的是:即使已经在redis.conf文件中把appendonly 从no改为了yes,把服务器重启了的情况也没有appendonly.aof文件时,必须要执行**
~~~
redis-cli config set appendonly yes
~~~
~~~
redis-cli config set save “”
~~~
**这两个命令后才会在安装目录下出现appendonly.aof文件**
appendonly.aof文件存储的就是我们输入的redis命令 .
~~~
*2
$6
SELECT
$1
0
*3
$3
SET
$1
a
$1
a
*3
$3
SET
$6
gender
$4
male
~~~
### AOF文件的重写
可以把多个incr指令换为一个set指令 .
![](https://img.kancloud.cn/9f/3d/9f3d932b30931fdc28cad3dce36f7aea_2080x1388.png)
如:每个命令重写一次aof,如果某个key操作100次,产生100行记录,aof文件会很大,怎么解决?
比如,当执行多次incr number操作,aof 文件中会保存多次incr number的命令。这样会增大aof文件容量,我们可以对aof文件重写,把里面重复的命令压缩成一条命令。
就比如执行10次incr number 压缩成set number 11 .
### AOF重写优点
1. 减少磁盘占用量;
2. 加速恢复速度;
### 一.执行重写的命令
这里的重写是将内存中的数据抽象成重写的命令,而不是真的把之前的命令重新执行一次.
执行重写的命令可以在登录状态,也可以在未登录状态 .
~~~
登录状态 : bgrewriteaof
~~~
~~~
未登录状态 : redis-cli -a 密码 bgrewriteaof
~~~
![](https://img.kancloud.cn/06/7b/067b7fab49014f77c6537d4d5c3303c8_2934x1286.png)
### 二.AOF重写配置
![](https://img.kancloud.cn/80/56/80560c95fff959b6dcea735556cdffd0_2170x350.png)
![](https://img.kancloud.cn/3f/d8/3fd82a7a7d2271be5b29a1507aa76afb_2178x348.png)
触发时机:
以下两点要同时满足:
1. 当前aof文件大小大于AOF文件需要的尺寸;
2. (当前AOF文件 - 上一次重写时文件的大小) / 上一次重写时文件的大小 > AOF文件增长率;
![](https://img.kancloud.cn/2f/03/2f031ca6834cdba1fba0ba2f05f891ed_1162x1594.png)
### 配置
![](https://img.kancloud.cn/0f/77/0f770fa3abffa383db2d3f92d3e196d8_2242x772.png)
- Redis简介
- 简介
- 典型应用场景
- Redis安装
- 安装
- redis可执行文件说明
- 三种启动方法
- Redis常用配置
- API的使用和理解
- 通用命令
- 数据结构和内部编码
- 单线程
- 数据类型
- 字符串
- 哈希
- 列表
- 集合
- 有序集合
- Redis常用功能
- 慢查询
- Pipline
- 发布订阅
- Bitmap
- Hyperloglog
- GEO
- 持久化机制
- 概述
- snapshotting快照方式持久化
- append only file追加方式持久化AOF
- RDB和AOF的抉择
- 开发运维常见问题
- fork操作
- 子进程外开销
- AOF追加阻塞
- 单机多实例部署
- Redis复制原理和优化
- 什么是主从复制
- 主从复制配置
- 全量复制和部分复制
- 故障处理
- 开发运维常见问题
- Sentinel
- 主从复制高可用
- 架构说明
- 安装配置
- 客户端连接
- 实现原理
- 常见开发运维问题
- 高可用读写分离
- 故障转移client怎么知道新的master地址
- 总结
- Sluster
- 呼唤集群
- 数据分布
- 搭建集群
- 集群通信
- 集群扩容
- 集群缩容
- 客户端路由
- 故障转移
- 故障发现
- 故障恢复
- 开发运维常见问题
- 缓存设计与优化
- 缓存收益和成本
- 缓存更新策略
- 缓存粒度控制
- 缓存穿透优化
- 缓存雪崩优化
- 无底洞问题优化
- 热点key重建优化
- 总结
- 布隆过滤器
- 引出布隆过滤器
- 布隆过滤器基本原理
- 布隆过滤器误差率
- 本地布隆过滤器
- Redis布隆过滤器
- 分布式布隆过滤器
- 开发规范
- 内存管理
- 开发运维常见坑
- 实战
- 对文章进行投票
- 数据库的概念
- 启动多实例