REdis AOF文件结构分析

REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示:

 

从REdis-5.0开始,AOF有文件头,目的是支持同时加载RDBAOF文件。AOF文件头和RDB文件头基本相同,但RDB文件头多了三个字段。

先看AOFRDB通用部分的文件头内容:

1) 头5字节固定为REDIS

2) 第6~9共四字节为RDB版本号

3) 接下来为redis-ver和它的值,即redis版本

4) 接着redis-bits和它的值,即redis的位数,值为3264

5) 接着为ctime和它的值,值为当前时间戳

6) 接着为used-mem和它的值

7) 最后是aof-preamble和它的值,值为011表示RDB有效。

 

RDB的文件头和AOF基本相同,但在aof-preamble之前多了如下三项:

1) repl-stream-db

2) repl-id

3) repl-offset

 

AOF文件中并未保存已复制的偏移(repl-offset),这个信息只保存在RDB文件头中。因此当进程重启时,并不能从AOF文件恢复复制偏移,除非以RDB方式运行(配置项appendonlyNO时)。

但是从REdis-5.0开始,加载AOF文件时,先读AOF文件头,如果发现有文件头(Reading RDB preamble from AOF file...),则会先从RDB加载数据,并恢复前面提到的复制偏移(repl-offset)等三项数据,剩余部分再从AOF文件读取(Reading the remaining AOF tail...)。

 

猜你喜欢

转载自www.cnblogs.com/aquester/p/10529549.html