REdis-5.0之前的AOF檔案沒有檔案頭,不管是REdis-5.0之前還是REdis-5.0,它們的AOF檔案體內容都如下圖所示:
從REdis-5.0開始,AOF有檔案頭,目的是支援同時載入RDB和AOF檔案。AOF檔案頭和RDB檔案頭基本相同,但RDB檔案頭多了三個欄位。先看AOF和RDB通用部分的檔案頭內容:
-
頭5位元組固定為REDIS
-
第6~9共四位元組為RDB版本號
-
接下來為redis-ver和它的值,即redis版本
-
接著redis-bits和它的值,即redis的位數,值為32或64
-
接著為ctime和它的值,值為當前時間戳
-
接著為used-mem和它的值
-
最後是aof-preamble和它的值,值為0或1,1表示RDB有效。
RDB的檔案頭和AOF基本相同,但在aof-preamble之前多瞭如下三項:
-
repl-stream-db
-
repl-id
-
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等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!