第五章:Redis持久化-AOF持久化

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對比數據的差別,找出丟失的數據,有些能夠人工修改補全。
相關文章
相關標籤/搜索