RDB文件结构

字段解释
"REDIS"固定以该字符串开始
RDB_VERSIONRDB文件的版本号
AUX_FILED_KEY_VALUE_PAIRS辅助字段键值对
DB_NUMredis数据库编号,指明数据需要存放到哪个数据库
DB_DICT_SIZE当前数据键值对散列表大小
EXPIRE_DICT_SIZE当前数据库过期时间散列表大小
KEY_VALUE_PAIRSRedis种具体键值对的存储
EOFRDB文件结束标志
CHECK_SUM8字节的校验码
  • RDB_VERSION:4字节的RDB版本号。
  • AUX_FIELD_KEY_VALUE_PAIRS:这是辅助字段
  • CHECK_SUM:

    RDB文件的最后8个字节是一个CRC64校验码。CRC,全称是循环冗余检查(Cyclic Redundancy Check),是一种常用的数据校验方法。
    
    RDB文件是Redis数据库的持久化文件,当Redis需要将当前数据库的状态持久化到磁盘时,会生成一个RDB文件。
    
    RDB文件的CRC64校验码主要用于检查文件在传输过程中或者存储过程中是否发生错误。当Redis加载RDB文件时,它会计算文件内容的CRC64校验码,并和文件末尾的校验码进行比较,如果两者一致,说明文件没有发生错误;如果不一致,说明文件可能已经损坏,此时Redis会拒绝加载该文件。
    
    简单来说,CRC64校验码就是一种错误检测机制,用来保证RDB文件的完整性。
    字段名称字段值字段名称字段值
    redis-ver5.0.03aof-preamble是否开启aof/rdb混合持久化
    redis-bits64/32repl-stream-db主从复制相关
    ctime当前时间戳repl-id主从复制相关
    uesd-memRedis占用内存repl-offset主从复制相关

使用xxd命令输出dump.rdb文件:

/data # xxd dump.rdb 
00000000: 5245 4449 5330 3030 39fa 0972 6564 6973  REDIS0009..redis
00000010: 2d76 6572 0535 2e30 2e33 fa0a 7265 6469  -ver.5.0.3..redi
00000020: 732d 6269 7473 c040 fa05 6374 696d 65c2  s-bits.@..ctime.
00000030: 228d 5466 fa08 7573 6564 2d6d 656d c208  ".Tf..used-mem..
00000040: 040d 00fa 0c61 6f66 2d70 7265 616d 626c  .....aof-preambl
00000050: 65c0 00fe 00fb 0200 0006 6b65 7956 616c  e.........keyVal
00000060: 0270 7000 0d74 6573 7453 7472 696e 6752  .pp..testStringR
00000070: 6462 0372 6462 ffc8 f081 df86 7ee7 92    db.rdb......~..

xxd filename命令将文件内容转换为16进制表示,并在每行的右侧尝试显示对应的ASCII字符。但是,值得注意的是,如果某个字符不在可打印的ASCII字符范围内(例如,它是一个控制字符或者超过了ASCII范围的字符),那么xxd将会用"."来代替该字符。

换句话说,只有当文件中的字符是可打印的ASCII字符时(十六进制的20到7E,或者十进制的32到126),xxd才能正确显示对应的ASCII字符。对于其他情况,xxd会显示"."。


Architecture
0 声望0 粉丝

知其然, 更要知其所以然~


« 上一篇
Redis