redis 随着命令不断的写入数据,aof 文件会越来越大。为了解决这个问题,redis 引入了 aof 文件重写机制,以便压缩 aof 体积 ,更小的 aof 文件可以更快的被 redis 加载。

aof 文件重写是将 redis 中的数据转换为 写命令同步更新到 aof 文件的过程。

重写 aof 后 为什么么可以变小

  • 清除了一些无效命令 eg. del srem
  • 进程内超时的数据不再写入 aof 文件
  • 多条写命令可以合并为批量写命令 eg. lpush list v1 lpush list v2 lpush list v3 合并为一条写入命令 lpush list v1 v2 v3

aof 重写流程

  • 执行 aof 重写请求
    如果当前进程正在执行 aof 重写,请求不执行并返回如下响应
    ERR Background append only file rewriting already in process
    如果当前正在执行 bgsave ,重写命令等待 bgsave 完成后执行 ,返回如下响应
    Background append only file rewriting shceduled

  • 父进程执行 fork 创建子进程,开心等同于bgsave过程

  • 父进程 fork 操作完毕之后,依然响应其他命令,所有修改命令依然写入 aof 缓冲区,并根据 appendfsync策略同步到硬盘,保证原有 aof 机制的有效性。

  • 由于 fork 操作采用写时复制技术,子进程只能共享fork 操作时的内存数据,由于父进程依然响应命令,redis 使用 aof 重写缓冲区 保存这部分新数据,防止aof文件生成期间这部分数据的丢失。

  • 子进程根据内存快照,按照命令合并规则写入到新的 aof 文件

  • 新 aof 文件 写入完成之后,子进程通知 父进程,父进程更新统计信息

  • 父进程把 aof 重写缓冲区的数据写入 新的 aof 文件

  • 使用 新 aof 文件替换 旧的 aof 文件

摘自 《redis 开发与运维》一书

redis aof 文件重写机制相关推荐

  1. Redis AOF 文件 恢复数据

    redis AOF 文件 恢复数据 redis.conf 中,将配置 appendonly no,改为appendonly yes,将其打开. 通过 redis-server redis.conf 的 ...

  2. REdis AOF文件结构分析

    REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示: 从REdis-5.0开始,AOF有文件头,目的是支持同时加载RD ...

  3. redis aof文件的格式 以及如何批量写入大量redis数据

    aof文件的格式 如何能批量写入大量的redis数据 可以通过手写aof文件来写入. aof文件格式 *3 $3 set $3 we3 $4 1234 第一行的*3代表这个命令有三个参数 第二行的$3 ...

  4. 使用redis.conf无法启动Redis// aof 文件损坏 // Bad file format reading the append only file

    今天在输入./redis-server ../redis.conf启动redis时,发现Redis没有正常启动... 排查: 首先正常启动redis-server,并查看Redis的启动状态 ./re ...

  5. 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重写 ...

  6. 阿里二面:Redis 中的 AOF 文件太大了怎么办?

    一.前言 写这篇文章的目的是来自我的一位粉丝的投稿,说面试阿里被问到了这个问题.不得不说阿里的面试问的都挺有质量,一般的我们只会关注 Redis 的两种持久化方式 RDB 和 AOF.但老周这里盲猜面 ...

  7. Redis AOF重写实现原理

    AOF(append only file)对Redis进行持久化是通过保存被执行的写命令来记录数据库状态的,随着服务器运行,AOF文件内容越来越多,载入AOF文件的时间会越来越长,影响Redis服务. ...

  8. Redis AOF 持久化详解

    来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...

  9. 转-Redis AOF 持久化详解

    转自: https://juejin.cn/post/6844903902991630349 Redis AOF 持久化详解 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据 ...

最新文章

  1. 行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...
  2. 一文学会动态规划解题技巧
  3. php连接数据库语言,PHP语言连接MYSQL数据库实例代码
  4. 神目 Android 人脸识别SDK编译说明
  5. 在学术论文投稿时你遇到过最奇葩的审稿意见是什么?
  6. 程序猿永远就是程序员的命么?
  7. 练习-前程无忧数据爬取
  8. linux-目录查询命令-目录内容查看-ls查询-tree查询-查询类容分类-不同颜色对应不同类型
  9. 获取页眉值vba_VBA抓取股票历史数据的整体表处理
  10. 光通量发光强度照度亮度关系_照度、强光、光通量之间是什么关系
  11. JDK集合框架结构分析(二)
  12. Unity粒子系统——简易特效制作(一)
  13. 值得收藏的5款办公软件,PDF转Word不再头疼
  14. 电机驱动软件学习笔记——ADC采样电流、温度、按键值
  15. win7旗舰版6l打印机咋安驱动_打印机安装不了,教您解决打印机驱动安装不了
  16. aid learning安装应用_极致安卓—Termux/Aid Learning安装宇宙最强VS Code
  17. 方便实用的串口调试工具/串口调试助手/串口精灵 (工具一)
  18. 畜牧兽医职称需要考英语和计算机,畜牧兽医专业技术职称考试试题
  19. Android框架——下载图片框架Fresco
  20. 百趣代谢组学文献分享:大麦盐胁迫响应机制的组学分析

热门文章

  1. 嵌入式linux环境取得U盘容量等信息的方法
  2. android连接php的url,android编程-解析URL-类同php的parse_url函数
  3. 30岁哥大计算机博士生遇刺身亡!论文刚被顶会接收,曾留学中国
  4. COB,COF,COG区别
  5. NOIP2017 游记
  6. python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问
  7. python 判断一个list列表是否包含另一个list列表
  8. 2020年工作上的最大收获——监控告警体系
  9. 为什么OKR新手要懂得OKRs-E?
  10. 介绍一个python工程师必须掌握的 CentOS 命令,nohup