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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM