Redis-持久化操作-AOF

持久化操作-AOF

AOF是什么?

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只允许加文 件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志 文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

AOF持久化流程

  1. 客户端的请求写命令会被append追加到AOF缓冲区内。
  2. AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作同步到磁盘的AOF文件中。
  3. AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量。
  4. Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的。

AOF默认不开启

可以在redis.conf中配置文件名称,默认为appendonly.aof。

AOF文件的保存路径,同RDB的路径一致。

如果AOF和RDB同时启动,Redis默认读取AOF的数据。

AOF启动/修复/恢复

  • 正常恢复
    1. 启动:设置Yes:修改默认的appendonly no,改为yes。
    2. 恢复:重启Redis然后重新加载。

例:设置appendonly为yes,配置修改后,需要重启Redis服务。

服务器启动后,生成appendonly.aof文件,且大小为0。

设置数据。

bash 复制代码
set k11 v11
set k12 v12
set k13 v13
set k14 v14
set k15 v15
  • 异常恢复
    1. 启动:设置Yes:修改默认的appendonly no,改为yes。
    2. 修复:如遇到AOF文件损坏,通过/user/local/bin/redis-check-aof --fix appendonly.aof进行 恢复。
    3. 恢复:重启Redis然后重新加载。

例:服务启动和数据设置同上,模拟损坏appendonly.aof文件

bash 复制代码
vim appendonly.aof.1.incr.aof

在文件最后追加Hello World文本,破坏appendonly.aof原有格式,使其不可用。

重启Redis服务,并连接。由于aof文件被破坏,导致服务器启动失败。

通过/user/local/bin/redis-check-aof --fix工具对appendonly.aof进行恢复。

bash 复制代码
redis-check-aof --fix appendonlydir/appendonly.aof.1.incr.aof

修复成功。再次查看aof文件,破坏的地方已经修复。再次启动服务器成功。

AOF同步频率设置

  1. appendfsync always

    始终同步,每次Redis的写入都会立刻记入日志,性能较差但数据完整性比较好。

  2. appendfsync everysec

    每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。

  3. appendfsync no

    redis不主动进行同步,把同步时机交给操作系统。

Rewrite

  1. AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大 小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令 集。

    例:设置k1为0,然后incr 进行了4次,k1对应的值会是4,其实就相当于set k1 4

  2. 重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定 Redis要满足一定条件才会进行重写。

    redis.conf默认配置

    auto-aof-rewrite-min-size:表示重写时,文件大小必须必这个值要大。

    auto-aof-rewrite-percentage:表示目前文件大小比上次重写后的文件大小大这么多才行。

相关推荐
saoys6 分钟前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
1.14(java)1 小时前
SQL数据库操作:从CRUD到高级查询
数据库
电子小白1231 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
唯情于酒2 小时前
Docker学习
学习·docker·容器
Full Stack Developme2 小时前
数据库索引的原理及类型和应用场景
数据库
clorisqqq3 小时前
人工智能现代方法笔记 第1章 绪论(1/2)
人工智能·笔记
charlie1145141913 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
IDC02_FEIYA3 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
IT=>小脑虎3 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
辞砚技术录4 小时前
MySQL面试题——联合索引
数据库·面试