redis学习十五:redis持久化之AOF
1.AOF是什么
以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),
redis重启的话会根据日志内容把指令从前到后执行一次来完成数据的恢复工作。
默认情况,redis没有开启AOF更,开启功能需要设置appendonly yes
aof保存的是appendonly.aof文件
2.AOF持久化工作流程
(1)client作为命令的来源,会有多个源头以及源源不断的请求命令
(2)这些命令并不是直接写入AOF文件,是先放入AOF缓存中进行保存,这里的AOF缓冲区实际上是内存中的一片区域
存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作
(3)AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。
(4)随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(AOF重写)从而起到AOF文件压缩的目的
(5)当redis server服务器重启的时候会从AOF文件载入数据
3.AOF三种写回策略
(1)always 同步写回,每个写命令执行完同步将日子写回磁盘
(2)everysec 默认策略,每秒写回,每个写命令执行完,只是先把日志写到aof文件内存缓冲区,每隔一秒把缓冲区内容写进磁盘
(3)no 每个写命令执行完,只是把日志写到aof文件的内存缓冲器,由操作系统决定何时将缓冲区内容写回磁盘
4.AOF案例演示
配置:
(1)开启aof
(2)默认每秒写回策略
(3)保存路径
redis6保存路径和rdb保存路径一样
redis7之后创建个文件夹appednonlydir,然后在这个文件夹里有对应.aof文件
(4)保存名称
redis6有且仅有一个
redis7之后multi part AOF :
基本文件appendonly.aof.1.base.rdb
增量文件appendonly.aof.1.incr.aof
清单文件appendonly.aof.manifest
经过写操作一般incr文件记录,文件大小变化
4.AOF恢复
正常恢复:
写入数据进redis,新生成dump和aof
然后备份新生成的aof
flushdb+shutdown服务器
把dump删掉,把新的aof删掉,把备份的名字改回来
启动服务器看看结果即可
异常恢复:
每一秒写入一次,
内容才写了一小半,没有写完整
突然redis挂了
导致aof文件错误
手动实验:在对应incr.aof中最后随便输入点cxlscksc
记得要加--fix!!!!
4.AOF优缺点
优点:更好的保护数据不丢失,性能高,可做紧急恢复
劣势:相同数据集的数据而言aof文件远大于rdb文件,恢复速度慢于rdb;
aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
5.AOF重写机制
是啥:因为aof的持久化是redis不断地将写命令记录到aof文件中,随着redis不断地进行,
aof的文件会越来越大,文件越大,占用服务器内存越大以及aof恢复要求时间越长
所以要启动aof文件的内容压缩,只保留可以恢复数据的最小指令集
触发机制
自动触发:同时满足两个条件(1)根据上次重写后的aof大小,判断当前aof大小是不是增长了一定倍率(2)重写时满足文件大小
图中是超过64且超过之前的100%
验证:
(1)满足值设置为1kb
(2)关闭混合,设置为no
(3)重启后疯狂输入set k1 111111111111111,在达到1kb之后重写了,base里记录的是最终结果的指令,incr记录每个写指令
手动触发:bgrewriteaof
结论:
aof文件重写并不是对原文件进行重新整理,而是直接读取服务器现有的键值对,然后用一条命令去代替之前记录
这个键值对的多条命令,生成一个新的文件去替换原来的aof文件
默认配置是当前aof文件大小是上次rewrite后大小的一倍且文件大于64m时触发
总结:
配置命令 | 配置含义 | 配置示例 |
appendonly |
是否开启aof |
appendonly yes |
appendfilename | 文件名称 | appendfilename "appendonly.aof" |
appendfsync |
同步方式 |
# appendfsync always |
no-appendfsync-on-rewrite | aof重写期间是否同步 | no-appendfsync-on-rewrite no |
auto-aof-rewrite-percentage |
重写触发配置,文件重写策略 |
auto-aof-rewrite-percentage 100 |
(1)aof文件是一个只进行追加的日志文件
(2)redis可以在aof文件体积变得过大的时候,自动的在后台对aof进行重写
(3)aof文件有序地保存了对数据库执行的所有写入操作,这些写入操作以redis协议的各式保存,因此aof文件的内容非常容易被人读懂,对文件分析也很轻松
(4)对于相同的数据集来说,aof文件的体积通常要大于rdb文件
(5)根据所使用的fsync策略,aof的速度可能会慢于rdb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」