Redis 数据库

一、服务器中的数据库

Redis服务器将所有数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDb结构,每个redisDb结构代表一个数据库。在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库,默认为16个

struct redisServer {
   
	...
    
    // 一个数组保存服务器所有的数据库
    redisDb *db;
     
    // 服务器的数据库的数量
    int dbnum;                      /* Total number of configured DBs */

    ...    
}

二、切换数据库

每个Redis客户端都有自己的目标数据库,每个客户端执行数据库写命令的时候或者读命令的时候,目标数据库就会成为这些命令的操作对象

默认情况下,客户端在0号数据库设置,可以使用SELECT 切换数据库,如下
在这里插入图片描述

在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的的目标数据库,这个属性是指向redisDb结构的指针

typedef struct redisClient {
   
	. . .

	// 记录客户端正在使用的数据库
	redisDb *db;

	. . . 
}

注意:

目前为止,Redis仍然没有可以返回客户端目标数据库的命令,但是如果使用其他语言操作Redis,并且该语言的客户端没有显示数据库,那么经过数次数据库切换可能会忘记在哪个数据库,特别是执行FLUSHDB这一类的操作之前,一定要先执行SELECT 操作。

三、数据库键空间

Redis是一个键值对(key-value pair)数据库服务器,服务器中的每个数据库都由一个redisDb结构表示,其中,redisDb结构的dict字典保存了数据库中的所有键值对,我们将这个字典称为键空间(key space)

键空间和用户所见的数据库是直接对应的

  • 键空间的键也就是数据库的键,每个键都是一个字符串对象
  • 键空间的值也就是数据库的值,每个值可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种Redis对象

例如执行操作

在这里插入图片描述

会形成如下数据结构

在这里插入图片描述
对于键值的各种增删改查,也比较容易联想,就不说了

读写键空间的维护操作

当使用Redis命令对数据库进行读写时,服务器不仅会对键空间执行指定读写操作,还会执行一些额外的维护操作

  • 在读取一个键之后(包括读操作和写操作),服务器会根据键是否存在,来更新服务器的键命中和不命中次数,可以通过INFO stats 命令的 keyspace_hits 属性和 keyspace_misses 属性查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值