zoukankan      html  css  js  c++  java
  • Redis持久化-AOF重写

    1.概述

    对重复冗余过期的明命令进行精简,创建新的AOF文件,覆盖旧的AOF文件

    原生AOF AOF重写

    set hello world

    set hello jack

    set hello zhangsan

    incr count

    incr count

    rpush mylist a

    rpush mylist b

    rpush mylist c

    过期数据

    set hello zhangsan

    set count 2

    rpush mylist a b c

    2.AOF重写的作用

    减少磁盘占用量

    加速恢复速度

    3.AOF重写配置

    配置名 含义
    auto-aof-rewrite-min-size  AOF文件重写需要尺寸
    auto-aof-rewrite-percentage AOF文件增长率

    4.AOF重写统计

    统计名 含义
    aof_current_size AOF当前尺寸(单位:字符)
    aof_base_size AOF上次启动和重写的尺寸

    5.AOF重写触发机制

    机制 解释
    aof_current_size > auto-aof-rewrite-min-size 当前AOF尺寸超过最小重写需要的尺寸时
    aof_current_size-aof_base_size/aof_base_size > auto-aof-rewrite-percentage AOF文件增长率超过多少时

    6.原理

    • 执行 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 文件

  • 相关阅读:
    .NET 多线程 Task async await
    .NET5 MVC 文件目录
    Html 问题记录
    vue学习笔记(记录知识点)
    vue调试工具vue-devtools安装及使用
    node.js入坑记录
    vue从0开始笔记
    前端样式css问题记录
    谷歌浏览器chrome console 发送POST/GET请求
    jQuery的请求数据方式
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13550794.html
Copyright © 2011-2022 走看看