请对Redis 数据库文件中RDB进行分析,包括主要特点、文件结构
2条回答
关注RDB 是 Redis 的另一种持久化方案,用于在特定的时间点对数据集进行快照存储。与 AOF(Append-Only File)持久化方案不同,RDB 生成的是一个二进制文件,该文件包含某一时刻 Redis 数据库中所有数据的副本。
主要特点
1.数据恢复:通过加载 RDB 文件,Redis 可以在启动时快速恢复数据。
2.二进制格式:RDB 文件是一个经过压缩的二进制文件,因此占用的磁盘空间相对较小。
3.性能优化:由于 RDB 是通过子进程进行快照生成的,因此对主进程的性能影响较小。
4.定时快照:用户可以配置 Redis 在多少秒内有多少次写操作时进行快照,以满足不同的数据持久性需求。
工作机制
1.快照生成:当满足用户配置的条件时,Redis 会 fork 出一个子进程来生成 RDB 文件。
2.数据加载:在 Redis 启动或执行 restore 命令时,RDB 文件会被加载到内存中。
3.自动与手动触发:除了自动触发 RDB 快照外,用户还可以手动通过 SAVE 或 BGSAVE 命令来生成 RDB 文件。
在 Redis 的源代码中,RDB 持久化主要涉及以下几个关键部分:
rdb.c:包含 RDB 持久化的主要逻辑。
rdbSave():这是 RDB 快照生成的核心函数。
rdbLoad():负责从 RDB 文件中加载数据到 Redis 数据库。
RDB 文件结构:详细解析

Magic Number (REDIS)长度:5 字节
作用:Magic Number 是用于标识一个文件是否为 RDB 格式的文件。这是 RDB 文件的第一个字段,用于快速识别文件类型。
示例:REDISMagic Number 是 RDB 文件的“签名”,当 Redis 或其他工具尝试读取一个 RDB 文件时,会首先检查这 5 个字节。如果这些字节不是 "REDIS",则文件会被认为是无效的。
RDB Version Number
长度:4 字节
作用:这个字段表示 RDB 文件的版本号,用于处理向后兼容性。
示例:0007不同版本的 Redis 可能会有不同的 RDB 格式。通过这个版本号,Redis 可以知道如何正确地解析文件。
Database Blocks
包含多个数据库(通常是 16 个),每个数据库都有自己的键值对。
每个数据库块开始于一个特定的标识符(例如,FE 表示一个新的数据库)。Database Blocks 是 RDB 文件中的主体部分,包含了所有数据库的数据。每个数据库都有一个或多个键值对,这些键值对以特定的编码(例如,字符串、列表、集合等)存储。
Key-Value Pairs
包含键和值的类型、长度和实际数据。
类型通常由一个字节表示,例如,string 类型可能由 00 表示。这是 RDB 文件中最核心的部分,它描述了实际的数据。每个键值对都有一个类型标识符和相应的数据。
End Of File (EOF)
一个特殊的标识符,表示 RDB 文件的结束。
通常是 FF。这是一个特殊的标识符,用于表示 RDB 文件的结束。当解析器读到这个标识符时,它会知道所有的数据库块和键值对都已经读取完毕。
Checksum
长度:8 字节
作用:用于验证 RDB 文件的完整性。Checksum 是所有前面数据的 CRC64 校验和。这用于在读取文件时检测任何潜在的错误或数据损坏。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报