redis数据库结构

本文介绍了Redis服务器的数据库结构,包括redisServer结构中的db数组和redisDb结构,详细讲解了默认的16个数据库、如何使用select命令切换以及键值对的存储方式。redisDb结构中的dict字典保存键值对,而expires字典存储过期时间,键空间和过期字典的关系以及如何节省存储空间。下篇将探讨Redis设置生存和过期时间的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:

struct redisServer{

//一个数组,保存着服务器中的所有数据库

redisDb *db;

//服务器的数据库数量

int dbnum;

}

dbnum属性的值由服务器配置的database选项决定,默认情况下,该选项的值为16,所以Redis服务器默认会创建16个数据库

如图

redis 默认使用下标为0的数据库  可以使用 select 语句切换数据库 。

下图示例演示了客户端在0号数据库设置并读取键msg,之后切换到2号数据库并执行类似操作的过程:

 

接下来看看每个redisDb下的构造

Redis是一个键值对(keyvaluepair)数据库服务器,服务器中的每个数据库都由一个redis.h/redisDb结构表示,其中,redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典称为键空间(keyspace):

键空间和用户所见的数据库是直接对应的:键空间的键也就是数据库的键,每个键都是一个字符串对象。键空间的值也就是数据库的值,每个值可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种Redis对象。

比如下图

alphabet是一个列表键,键的名字是一个包含字符串"alphabet"的字符串对象,键的值则是一个包含三个元素的列表对象。

book是一个哈希表键,键的名字是一个包含字符串"book"的字符串对象,键的值则是一个包含三个键值对的哈希表对象。

message是一个字符串键,键的名字是一个包含字符串"message"的字符串对象,键的值则是一个包含字符串"helloworld"的字符串对象。

 

众所周知  redis可以设置数据的过期时间

 

redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典:

过期字典的键是一个指针,这个指针指向键空间中的某个键对象(也即是某个数据库键)。

过期字典的值是一个longlong类型的整数,这个整数保存了键所指向的数据库键的过期时间——一个毫秒精度的UNIX时间戳。

下图是一个存储示例

注意:为了展示方便,图中键空间和过期字典中重复出现了两次alphabet键对象和book键对象。在实际中,键空间的键和过期字典的键都指向同一个键对象,所以不会出现任何重复对象,也不会浪费任何空间。

下一章redis 设置生存和过期时间的原理

https://blog.youkuaiyun.com/qq_28056571/article/details/103895014

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值