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 文件

  • 相关阅读:
    20191028 Codeforces Round #534 (Div. 1)
    20191028 牛客网CSP-S Round2019-1
    UVA11464 Even Parity 搜索+递推
    CSP2019-S1 游记
    LG2921 [USACO2008DEC]Trick or Treat on the Farm 内向基环树
    bzoj 2002 Bounce 弹飞绵羊
    快速乘,快速幂,十进制快速幂,矩阵快速幂
    2019牛客暑期多校训练营(第五场) generator 1
    2019牛客暑期多校训练营(第五场) digits 2
    hdu 4714 Tree2cycle
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13550794.html
Copyright © 2011-2022 走看看