database 结构

本文详细介绍了Redis数据库的RDB文件结构,包括非空数据库的划分、SELECTDB和db_number的作用,以及key_value_pairs的组成,特别提到了带有和不带过期时间的键值对的存储方式。
摘要由CSDN通过智能技术生成

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 持续学习,不断总结,共同进步,活到老学到老
  • 人生的本质是追寻自我的提升,包括思想、能力、意志等等。
  • 直面变化,找到背后更基础的东西,更基础的东西是用户的需求。
  • 我们的成功是我们的现在和将来决定的。今天和明天已经由昨天决定,你还可以决定后天。

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

7.database 结构

一个 RDB 文件的 databases 部分可以保存任意多个非空数据库。例如,如果服务器的 0 号数据库和 3 号数据库非空,那么服务器将创建一个如下图所示的 RDB 文件

image-20230804174716865

image-20230804174738411

每个非空数据库在 RDB 文件中都可以保存为 SELECTDBdb_numberkey_value_pairs 三个部分:

  • SELECTDB 常量:长度为 1 字节,当读入程序遇到这个值的时候,它知道接下来要读入的将是一个数据库号码
  • db_number:保存着一个数据库号码,根据号码的大小不同,这个部分的长度可以是 1 字节、2 字节或者 5 字节。当程序读入 db_number 部分之后,服务器会调用 SELECT 命令,根据读入的数据库号码进行数据库切换,使得之后读入的键值对可以载入到正确的数据库中
  • key_value_pairs 部分:保存了数据库中的所有键值对数据,如果键值对带有过期时间,那么过期时间也会和键值对保存在一起。根据键值对的数量、类型、内容以及是否有过期时间等条件的不同,key_value_pairs 部分的长度也会有所不同

下图则展示了一个完整的 RDB 文件,文件中包含了 0 号数据库和 3 号数据库

image-20230804174835118

8.key_value_pairs 结构

key_value_pairs 都保存了一个或以上数量的键值对,如果键值对带有过期时间的话,那么键值对的过期时间也会被保存在内。
不带过期时间的键值对:在 RDB 文件中由 TYPEkeyvalue3 部分组成:

  • TYPE:记录了 value 的类型,长度为 1 字节,值可以是以下常量的其中一个(以下列出的每个 TYPE 常量都代表了一种对象类型或者底层编码,当服务器读入 RDB 文件中的键值对数据时,程序会根据 TYPE 的值来决定如何读入和解释 value 的数据。key 和 value 分别保存了键值对的键对象和值对象):
    • REDIS_RDB_TYPE_STRING
    • REDIS_RDB_TYPE_LIST
    • REDIS_RDB_TYPE_SET
    • REDIS_RDB_TYPE_ZSET
    • REDIS_RDB_TYPE_HASH
    • REDIS_RDB_TYPE_LIST_ZIPLIST
    • REDIS_RDB_TYPE_SET_INTSET
    • REDIS_RDB_TYPE_ZSET_ZIPLIST
    • REDIS_RDB_TYPE_HASH_ZIPLIST
  • key:其中 key 总是一个字符串对象,它的编码方式和 REDIS_RDB_TYPE_STRING 类型的 value 一样。根据内容长度的不同,key 的长度也会有所不同
  • value:根据 TYPE 类型的不同,以及保存内容长度的不同,保存 value 的结构和长度也会有所不同

下图展示了一个没有过期时间的字符串键值对:

image-20230804175024225

带有过期时间的键值对结构
带有过期时间的键值对在 RDB 文件中由 EXPIRETIME_MS、ms、TYPE、key、value 五部分组成:

  • EXPIRETIME_MS 常量:长度为 1 字节,它告知读入程序,接下来要读入的将是一个以毫秒为单位的过期时间
  • ms:是一个 8 字节长的带符号整数,记录着一个以毫秒为单位的 UNIX 时间戳,这个时间戳就是键值对的过期时间

image-20230804175118217

假设 0 号数据库中有 2 个不带有过期时间的键值对,数据库 3 含有 1 个不带有过期时间的键值对和 1 个带有过期时间的键值对

image-20230804175134984

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值