REdis AOF文件结构分析
REdis-5.0之前的AOF文件沒(méi)有文件頭,不管是REdis-5.0之前還是REdis-5.0,它們的AOF文件體內(nèi)容都如下圖所示:
從REdis-5.0開(kāi)始,AOF有文件頭,目的是支持同時(shí)加載RDB和AOF文件。AOF文件頭和RDB文件頭基本相同,但RDB文件頭多了三個(gè)字段。
先看AOF和RDB通用部分的文件頭內(nèi)容:
1) 頭5字節(jié)固定為REDIS
2) 第6~9共四字節(jié)為RDB版本號(hào)
3) 接下來(lái)為redis-ver和它的值,即redis版本
4) 接著redis-bits和它的值,即redis的位數(shù),值為32或64
5) 接著為ctime和它的值,值為當(dāng)前時(shí)間戳
6) 接著為used-mem和它的值
7) 最后是aof-preamble和它的值,值為0或1,1表示RDB有效。
RDB的文件頭和AOF基本相同,但在aof-preamble之前多了如下三項(xiàng):
1) repl-stream-db
2) repl-id
3) repl-offset
AOF文件中并未保存已復(fù)制的偏移(repl-offset),這個(gè)信息只保存在RDB文件頭中。因此當(dāng)進(jìn)程重啟時(shí),并不能從AOF文件恢復(fù)復(fù)制偏移,除非以RDB方式運(yùn)行(配置項(xiàng)appendonly為NO時(shí))。
但是從REdis-5.0開(kāi)始,加載AOF文件時(shí),先讀AOF文件頭,如果發(fā)現(xiàn)有文件頭(Reading RDB preamble from AOF file...),則會(huì)先從RDB加載數(shù)據(jù),并恢復(fù)前面提到的復(fù)制偏移(repl-offset)等三項(xiàng)數(shù)據(jù),剩余部分再?gòu)腁OF文件讀取(Reading the remaining AOF tail...)。
歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)師:697558955
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用"沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來(lái)的自己一個(gè)交代!
轉(zhuǎn)載于:https://blog.51cto.com/14233733/2367458
總結(jié)
以上是生活随笔為你收集整理的REdis AOF文件结构分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从零开始学数据结构和算法(二)线性表的链
- 下一篇: to_char 函数将小数点舍掉的解决办