[Redis扫盲]---(1)数据库原理---(1)客户端目标数据库切换

Author:赵志乾
Date:2018-12-01
Declaration:All Right Reserved!!!

1、Redis服务器信息

部署Redis服务的服务器称为Redis服务器,其服务器的相关配置以优化Redis服务为终极目标,此类为物理服务器。Redis服务器上我们会起一些服务器实例,此类为软件服务器。以下如无特殊说明,Redis服务器均指软件服务器。在Redis服务器中,整个服务器的状态信息(Redis相关)均由一个redisServer结构体来维护。该结构体的详细定义见server.h文件。

redisServer作为一个维护Redis服务器状态的内存结构,其内部包含大量的属性字段。在关注客户端如何确定要操作的具体数据库时,我们可先暂时只关注其中的一个属性字段:db。db字段的类型是一个指向redisDB的指针。在Redis服务器上通常不止一个数据库,其用一个数组来整合所有的数据库,而redisServer中的db属性字段则指向用于维护数据库的数组首地址。结构如下:

注:数据库数组的长度由redisServer中的dbnum属性字段指定,其值在初始化时由配置文件中的database属性指定。默认情况下其值是16,故Redis服务器在启动时,默认情况下会创建16个数据库。

2、Redis客户端信息

客户端在向服务端发送读或写指令时,只会操纵数据库数组中的某一个。服务器端为了确定客户端要操作的具体数据库,会在内存中为每一个客户端维护一个client结构体。该结构体同样包含许多属性字段,现在我们只关心其中的db属性字段。client中的db字段同样为指向redisDb的指针,用于表征该客户端的目标数据库,其值为数据库数组中某一元素的地址。默认情况下,client.db指向的是标号为0的数据库,在具体的操作过程中,可以通过select指令完成目标数据库的切换。其结构如下:

故Redis指令中的select工作原理就是更改client结构体中的db的指向。由于此类关联关系维护在服务器端,为了保证一个客户端在不同时刻准确的操作不同数据库,通常会先用select选中指定目标数据库,以防出现误操作。

3、Redis客户端信息查看

使用client list指令,可以查看Redis服务器当前活跃客户端的信息,指令原理见《客户端与服务器关系维护》。上文中提到通过select指令可以切换Redis客户端的目标数据库,实例如下图。从中可以看出,刚启动的Redis客户端,其db值为0,表示使用的是0号数据库,使用select指令更换为1号数据库后,其db值为1。而默认情况下,将目标数据库切换为16号数据库时,报数据库下标越界,即默认配置时,Redis服务器拥有16个数据库,标号从0到15。

 

参考资料:

《Redis设计与实现》---黄健宏

2018-12-01 非稳定版本Redis源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值