AOF持久化
AOF全称append only file持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的:
AOF主要作用是解决了数据实时持久化的问题;
使用AOF
开始AOF需要设置appendonly yes,默认不开启。
AOF文件名通过appendonlyname配置,默认文件名为appendonly.aof:
AOF工作流程操作:命令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(reload):
  • 所有写入命令会追加到aof_buf缓冲区中
  • AOF缓冲区根据对应的策略向硬盘做同步操作
  • 随着AOF文件越来越大,需要定期对AOF文件做重写,达到压缩目的
  • 当Redis服务器重启时,可以加载AOF文件进行数据恢复。
命令写入
  • 采用文本协议格式具有更好的兼容性
  • 开始AOF后,所有写入命令都包含追加操作,直接采用协议格式,避免二次处理开销
  • 文本协议具有可读性,方便直接修改和处理
  • AOF通过追加到aof_buf缓冲区的方式,避免了直接追加到硬盘慢的问题,因为缓冲区时内存中的,相对于硬盘有更好的写入速度。另外,Redis可以提供多中缓冲区同步硬盘的策略;
文件同步
指缓存区数据同步到AOF文件的过程,有参数appendfsync控制;
  • always:命令写入aof_buf后调用系统fsync操作同步到aof文件
  • everysec:命令写入aof_buf后调用write操作,write完成后线程返回,fsync同步文件操作由专门线程每秒调用一次
  • no:命令写入aof_buf后,调用系统write操作,不对aof文件做fsync同步,同步硬盘操作由操作系统负责,通常同步周期为最长30秒;
write操作:触发延迟写机制,Linux在内核提供页缓存区用于提高硬盘IO性能,write操作在写入系统缓冲区后直接返回,同步 硬盘草最依赖于系统调度机制;
fsync操作:针对单个文件操作,比如aof文件,做强制硬盘同步,fsync将阻塞直到写入硬盘完成后返回,保证了数据持久化。
重写机制
AOF文件越来越大,Redis提供了重写机制压缩文件体积。
AOF文件重写是把Redis进程内的数据转化为写命令同步到AOF文件的过程;
  • 进程内已经超时的数据不在写入文件
  • 旧的AOF文件含有无效命令,重写使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令;
  • 多条写命令可以合并为一个。为了防止单条命令过大导致客户端缓冲区溢出,对于list、set、hash、zset等类型操作,以64位元素为界拆分为多条。
AOF重写后占用更少的空间;
AOF重写后文件更小,被Redis加载速度更快;
AOF重写触发过程:
  • 手动触发:调用bgrwriteaof命令
  • 自动触发:使用auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机;
auto-aof-rewrite-min-size:表示运行aof重写时文件最小体积,默认64M
auto-aof-rewrite-percentage:代表当前aof文件空间和上一次重写后aof文件空间的比例;
AOF重写流程:
  1. 执行AOF重写命令
  2. 父进程执行fork创建子进程,开销等同于bgsave
  3. 主进程fork进程后,继续响应其他请求,所有写命令依然写入AOF缓冲区并根据appendfsync策略同步到硬盘,保证原有AOF机制正确性;
  4. 由fork操作运用写时复制技术,子进程只能共享fork操作时的内存数据;由于父进程依然响应命令,Redis使用“AOF重写缓冲区”技术保存这部分数据,防止新的AOF文件生成期间丢失这部分数据;
  5. 子进程根据内存快照,按照命令合并规则写入到新的AOF文件,需要控制每次写入量,防止硬盘阻塞;
  6. 新的AOF文件写入完成后,子进程发送信号给父进程,父进程更新统计信息
  7. 父进程把aof重写缓冲区的数据写入到新的aof文件
  8. 使用新的aof文件替换老文件,完成aof重写;
重启加载
  1. AOF持久化开启且存在AOF文件时,优先加载aof文件
  2. aof关闭或者aof不存在时,加载rdb文件
  3. 加载aof/rdb文件成功后,redis启动成功
  4. aof/rdb文件存在错误时,redis启动失败并打印错误信息
文件校验
aof损坏时,使用redis-check-aof --fix命令进行修复,修复后使用diff -u对比数据的差异,找出丢失的数据,有些可以人工修改补全。

转载于:https://www.cnblogs.com/use-D/p/10766040.html

第五章:Redis持久化-AOF持久化相关推荐

  1. 天天在用Redis,那你对Redis的AOF持久化到底了解多少呢?

    为什么需要持久化,以及Redis持久化的RDB方式在这篇文章讲的已经很透彻了,足以吊打面试官了.而且此篇内容需要RDB文章的内容支持,所以建议先看下:看完这篇还不懂Redis的RDB持久化,你们来打我 ...

  2. Redis的AOF持久化的实现

    Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中. AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参 ...

  3. 图解redis的AOF持久化

    目录 1.引言 2.AOF持久化的实现 2.1命令追加 2.2AOF文件的写入 3.AOF的文件载入和数据还原 4.AOF重写 4.1AOF重写实现 4.2AOF后台重写(BGREWRITEAOF) ...

  4. Redis 中的 持久化 AOF持久化 打开AOF持久化功能 设置AOF文件的冲洗频率 AOF重写 AOF持久化的优缺点

    这里写目录标题 15.2 AOF持久化 15.2.1 打开AOF持久化功能 15.2.2 设置AOF文件的冲洗频率 15.2.3 AOF重写 1.BGREWRITEAOF命令 其他信息 2.AOF重写 ...

  5. 《Redis设计与实现》笔记|SDS动态字符串|链表字典跳跃表整数集合压缩列表结构|redis中的对象|数据库原理|RDB持久化|AOF持久化|事件与多路利用模型|发布订阅原理|事务原理|慢查询日志

    <Redis设计与实现>笔记 前记: 参考配套网站:http://redisbook.com 带注释的源码地址:https://github.com/huangz1990/redis-3. ...

  6. Redis数据持久化之AOF持久化

    一.RDB持久化的缺点 创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常耗费资源和时间的操作,所以服务器需要隔一段时间才能创建一个新的RDB文件,就也是说创建RDB文件的操作不能执 ...

  7. Redis 持久化策略 : RDB持久化、AOF持久化、混合持久化

    文章目录 什么是持久化 RDB持久化 SAVA与BGSAVA RDB持久化的优缺点 AOF持久化 AOF重写 AOF持久化的优缺点 混合持久化 混合持久化的优缺点 什么是持久化 由于内存具有易失性,无 ...

  8. NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片)

    关系型数据库与非关系型数据库 关系型数据库与菲关系型数据库 关系型数据库 非关系型数据库 非关系型数据库产生背景 Redis简介 Redis配置文件 Redis的安装 安装环境 Redis数据库常用命 ...

  9. 十九 Redis AOF持久化

    RDB 持久化的缺点RDB 持久化,这种持久化可以将数据库里面的数据以二进制文件的形式储存到硬盘里面. RDB 持久化有一个缺点,那就是,因为创建 RDB 文件需要将服务器所有数据库的数据都保存起来, ...

最新文章

  1. 2048游戏的python实现
  2. JSP页面Table的数据绑定
  3. ALL in BERT:一套操作冲进排行榜首页
  4. 【线上直播】LiveVideoStack Meet | 长沙:多媒体与广电
  5. python读取上一级文件夹下的图片
  6. docker 查看日志_8个优秀Docker容器监控工具,收藏了
  7. Python学习笔记(列表和元组的简单实用)
  8. (10)Verilog HDL异步复位同步释放
  9. 计算机网络普遍采用什么传输方式,网络传输技术
  10. 微信小程序系列(3)如何用微信小程序写一个论坛?贴心代码详解(一)发帖
  11. 流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》
  12. 【Java】Java文件读写
  13. IPv4地址中的保留和特殊用途地址
  14. 易语言 html做ui,易语言皮冯 易语言DirectUI界面库你的硬件也可美化超漂亮!
  15. h5 video在微信中 全屏播放 退出后的坑
  16. 单片机:数字电压表TLC2543 C程序代码
  17. 阿里云跨境游戏及电商网络加速方案(全球加速和CDN)
  18. 稳压二极管1N4733A使用方法
  19. 使用Slidingmenu爆出“Both setBehindContentView must be called in onCreate in addition to setContentView.”
  20. 数据结构系列-初识数据结构

热门文章

  1. 微信小程序 canvas 绘图问题
  2. java之设计模式工厂三兄弟之简单工厂模式
  3. 任意手机虚拟按键增加方法
  4. CentOS7下安装达梦数据库的步骤
  5. 在线正则表达式可视化工具
  6. ACM题目中输入数据的处理(C++语言版)
  7. python教程(六)·字符串
  8. JavaScript:语言精粹
  9. git-osc自己定义控件之:CircleImageView
  10. Access数据库通过ODBC导出到Oracle的两个小问题ora-24801\Ora-01401