文章目录

  • 1 AOF(append only file)
    • 1.1 AOF是什么
    • 1.2 AOF 持久化流程
    • 1.3 AOF 默认不开启
    • 1.4 AOF 和RDB同时开启听谁的
    • 1.5 AOF启动修复恢复
    • 1.6 AOF 同步频率
    • 1.7 Rewrite压缩
    • 1.8 优势
    • 1.9 劣势
  • 2 小总结(which one)

1 AOF(append only file)

1.1 AOF是什么

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

1.2 AOF 持久化流程

客户端的请求写命令会被append追加到aof 缓冲区内;

aof 缓冲区根据aof持久化策略(always,everysec,no)将操作sync同步到磁盘的aof文件中;

aof文件大小超过重写策略或手动重写时,会对aof文件rewrite重写,压缩aof文件容量

redis 服务重启时,会重新load加载aof文件中的写操作达到数据恢复的目的;

1.3 AOF 默认不开启

可以在redis.conf中配置文件名称,默认为appendonly.aof
AOF文件的保存路径,同RDB路径一致

appendonly no# The name of the append only file (default: "appendonly.aof")appendfilename "appendonly.aof"

1.4 AOF 和RDB同时开启听谁的

AOF 和RDB同时开启,redis 会默认取AOF的数据(数据不会丢失)

1.5 AOF启动修复恢复

aof的备份机制和性能虽然和rdb不同,但是备份和恢复的操作同rdb一样,都是拷贝备份文件,需要恢复时再拷贝到redis工作目录,启动系统即加载

正常恢复
修改默认的appendonly no 改为yes
将有数据的aof文件复制一份保存到对应的目录(查看目录:config get dir)

恢复
重启reids然后重新加载

异常恢复
修改默认的appendonly no 改为yes
如果遇到aof文件损坏,通过/usr/loacal/bin/redis-check-aof --fix appendonly.aof 进行恢复
备份被写坏的aof文件
恢复:重启redis,然后重新加载

# redis-check-aof --fix appendonly.aof

1.6 AOF 同步频率

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

# appendfsync always

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

appendfsync everysec

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

# appendfsync no

1.7 Rewrite压缩

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

重写原理
aof文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),reids4.0版本后的重写,是把rdb的快照,以二进制的形式附在新的aof头部,作为已有的历史数据,替换原来的流水账操作

no-appendfsync-on-rewrite no

触发机制
redis会记录上次重写时的aof大小,默认配置是当aof文件大小是上次rewrite后大小的一倍且文件大于64M时触发

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

auto-aof-rewrite-percentage 设置重写的基准值,文件达到100%时开始重写(文件是原来重写后文件的两倍时触发)

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

重写流程
bgrewriteaof触发重写,判断是否当前有bgsave或bgrewriteaof在运行,如果有,则等待该命令结束后再继续执行。

主进程fork出子进程执行重写操作,保证主进程不会阻塞

子进程遍历redis内存中数据到临时文件,客户端的写请求同时写入aof_buf
缓冲区和aof_rewrite_buf重写缓冲区保证原aof文件完整以及新aof文件生成期间的新的数据修改动作不会丢失

子进程写完新的aof文件后,向主进程发信号,父进程更新统计信息,
主进程把aof_rewrite_buf中的数据写入到新的aof文件

使用新的aof文件覆盖旧的aof文件,完成aof重写

1.8 优势

备份机制更稳健,丢失数据概率更低

可读的日志文本,通过操作aof文件,可以处理误操作

1.9 劣势

比起RDB占用更多的磁盘空间
恢复备份速度慢
每次读写同步的话,有一定的性能压力
存在个别bug,造成不会恢复

2 小总结(which one)

官方推荐两个都启用
如果对数据不敏感,可以单独选用RDB
不建议单独用aof,因为可能会出现bug
如果只是做纯内存缓存,可以都不用

9 Redis 持久化AOF相关推荐

  1. Redis持久化:AOF和RDB

    持久化(persistence) Redis 持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapsh ...

  2. 第五章:Redis持久化-AOF持久化

    AOF持久化 AOF全称append only file持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的: AOF主要作用是解决了数据实时持久化的问题: 使 ...

  3. Redis持久化——AOF机制详解

    在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis ...

  4. Redis 持久化——AOF 详解

    目录 1.1 概述 1.2 AOF 持久化的实现 1.2.1  命令追加 1.2.2 AOF 文件的写入与同步 1.3 AOF文件的载入与数据还原 1.4 AOF 重写 1.4.1 AOF 文件重写的 ...

  5. 峰Redis学习(8)Redis 持久化AOF方式

    第三节:Redis 的持久化之AOF 方式 AOF方式:将以日志,记录每一个操作 优势:安全性相对RDB方式高很多: 劣势:效率相对RDB方式低很多: 1)AOF方式需要配置: # Please ch ...

  6. Redis 持久化——AOF

    使用 RDB 持久化有一个风险,它可能会造成最新数据丢失的风险.因为 RDB 的持久化有一定的时间间隔,在这个时间段内如果 Redis 服务意外终止的话,就会造成最新的数据全部丢失. 可能会操作 Re ...

  7. redis持久化--AOF(九)

    AOF(Append Only File): 是什么:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件 ...

  8. 快速入门并上手redis持久化技术RDB和AOF

    文章目录 一.redis持久化 1.1 redis持久化RDB 1.1.1 简介 1.1.2 优缺点 1.1.3 持久化的自动触发和手动触发 1.2 redis持久化AOF 1.2.1 简介 1.2. ...

  9. Redis持久化----RDB和AOF 的区别

    关于Redis说点什么,目前都是使用Redis作为数据缓存,缓存的目标主要是那些需要经常访问的数据,或计算复杂而耗时的数据.缓存的效果就是减少了数据库读的次数,减少了复杂数据的计算次数,从而提高了服务 ...

最新文章

  1. 浅析网站优化知识自学从哪些方面开始起步
  2. ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)
  3. Android O: View的绘制流程(一): 创建和加载
  4. 我的机器学习和深度学习绘图模板.pptx
  5. 【转载】define与typedef区别与联系
  6. 是时候展现真正的技术了!4道程序员智力题你能对几道| IT巨能唠
  7. STM32驱动LCD实战
  8. BMC之ipmitool 命令收集
  9. 2020全国计算机专业考研学校
  10. mysql.5.7 declare_MySQL-5.7 游标及DECLARE
  11. iMindMap手绘思维导图软件免费版
  12. 以阿尔兹海默症为例:深度解析AI+慢病商业模式
  13. XRecyclerView Scrapped or attached views may not be recycled
  14. ECharts Y轴固定分割段数,Y轴动态数值非写死
  15. 【狂神说】Docker 学习笔记【基础篇】
  16. 2021考研数学 高数第二章 导数与微分
  17. Android怎么实现数字增减,Android实现数字跳动效果的TextView方法示例
  18. Go 语言 exec 实时获取外部命令的执行输出
  19. selenium 下拉框失焦定位
  20. 迅雷Q2季报图解:净利70万美元 环比下降91%

热门文章

  1. 4-Qt6控制台项目信号与槽
  2. linux5.8不能上网,Ubuntu 8.04不能上网的问题的解决方法
  3. java前沿技术_Java语言就业前景如何?这4个就业方向都很吃香
  4. mq同步mysql数据 duplicate entry_MySQL数据同步之otter
  5. Java有趣的小功能_Java8 中有趣酷炫的小技巧你用到了那些
  6. linux eclipse 配置c++开发环境,用Eclipse搭建C/C++开发环境
  7. 切片分析报告格式_疫情舆情分析研判报告怎么撰写?2020舆情报告格式
  8. java 图像处理 空白_使用Java进行图像处理的一些基础操作
  9. 自编码器参数是否需要相称呢
  10. python怎么输出小数部分_python 输出小数控制