REdis AOF檔案結構分析

java愛好者i發表於2019-03-22

REdis-5.0之前的AOF檔案沒有檔案頭,不管是REdis-5.0之前還是REdis-5.0,它們的AOF檔案體內容都如下圖所示:

REdis AOF檔案結構分析
從REdis-5.0開始,AOF有檔案頭,目的是支援同時載入RDB和AOF檔案。AOF檔案頭和RDB檔案頭基本相同,但RDB檔案頭多了三個欄位。

先看AOF和RDB通用部分的檔案頭內容:

  1. 頭5位元組固定為REDIS

  2. 第6~9共四位元組為RDB版本號

  3. 接下來為redis-ver和它的值,即redis版本

  4. 接著redis-bits和它的值,即redis的位數,值為32或64

  5. 接著為ctime和它的值,值為當前時間戳

  6. 接著為used-mem和它的值

  7. 最後是aof-preamble和它的值,值為0或1,1表示RDB有效。

RDB的檔案頭和AOF基本相同,但在aof-preamble之前多瞭如下三項:

  1. repl-stream-db

  2. repl-id

  3. repl-offset

AOF檔案中並未儲存已複製的偏移(repl-offset),這個資訊只儲存在RDB檔案頭中。因此當程式重啟時,並不能從AOF檔案恢復複製偏移,除非以RDB方式執行(配置項appendonly為NO時)。

但是從REdis-5.0開始,載入AOF檔案時,先讀AOF檔案頭,如果發現有檔案頭(Reading RDB preamble from AOF file...),則會先從RDB載入資料,並恢復前面提到的複製偏移(repl-offset)等三項資料,剩餘部分再從AOF檔案讀取(Reading the remaining AOF tail...)。

歡迎工作一到五年的Java工程師朋友們加入Java架構師:697558955

群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

相關文章