Redis 4.0启用aof-use-rdb-preamble yes后,AOF文件头结构为:前5字节固定“REDIS”,接着4字节RDB版本号,随后是redis-ver、redis-bits、ctime、used-mem、aof-preamble等键值对字段,与RDB文件头通用部分一致,但缺少repl-id、repl-offset、repl-stream-db三项。

混合模式下AOF文件头的结构是什么
Redis 4.0启用aof-use-rdb-preamble yes后,AOF文件不再是纯文本命令流,而是以RDB格式头部开头。这个头部和标准dump.rdb文件的前缀完全一致:前5字节固定为REDIS,紧接4字节RDB版本号(如0009表示RDB version 9),之后是键值对形式的元信息字段,包括redis-ver、redis-bits、ctime、used-mem和aof-preamble。
如何验证当前AOF文件是否含RDB前导
直接用head -c 20 appendonly.aof | hexdump -C查看前20字节。若输出以52 45 44 49 53(即ASCII的REDIS)起始,说明已启用混合模式;否则是传统纯AOF格式。注意:即使配置了aof-use-rdb-preamble yes,也需触发一次bgrewriteaof才会生成带前导的新AOF文件——旧AOF不会自动升级。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
RDB段与AOF段在文件中如何分界
文件中RDB二进制数据段结束后,紧跟一个0xFF字节作为分隔符,之后才是传统AOF文本命令(如*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n)。Redis加载时通过fread(sig,1,5,fp)检测前5字节是否为REDIS来判断是否存在RDB preamble;若命中,则调用rdbLoadRio()解析RDB段,再跳过0xFF继续按AOF协议解析后续内容。
为什么混合模式下复制信息会丢失
因为AOF文件头不包含repl-id和repl-offset字段(这两项只存在于纯RDB文件头中),所以当appendonly yes且存在AOF文件时,Redis重启后无法获取复制偏移量,只能进行全量同步(full sync)。这是混合模式的隐含代价——你获得了更快的恢复速度和更小的AOF体积,但放弃了RDB自带的复制上下文。

















