Redis-02单机数据库的实现

Redis-02单机数据库的实现

1、服务器中的数据库

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

在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库;

c 复制代码
struct redisServer{
    // 一个数组,保存着服务器中的所有数据库
    redisDb *db;
    // 服务器的数据库数量
    int dbnum
}

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

2、切换数据库

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

默认情况下,Redis客户端的目标数据库为0号数据库,客户端可以通过执行SELECT命令来切换目标数据库

使用SELECT切换目标数据库案例如下:

bash 复制代码
127.0.0.1:6379> SET msg 'Hello Redis'
OK
127.0.0.1:6379> GET msg
"Hello Redis"
# 切换到2号数据库
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> GET msg
(nil)
127.0.0.1:6379[2]> SET msg "HaHaHa"
OK
127.0.0.1:6379[2]> GET msg
"HaHaHa"
127.0.0.1:6379[2]>

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

例如,某个客户端的目标数据库为1号数据库,那么这个客户端所对应的客户端状态和服务器状态之间的关系如下:

若此时客户端执行SELECT 2,将目标数据库改为2号数据库,那么客户端状态和服务器状态之间的关系将更新如下所示:

3、数据库键空间

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

c 复制代码
typedef struct redisDb{
    // 数据库键空间,保存着数据库中的所有键值对
    dict *dict;
}

键空间案例:

总结:

相关推荐
fat house cat_1 小时前
【redis】线程IO模型
java·redis
敖云岚2 小时前
【Redis】分布式锁的介绍与演进之路
数据库·redis·分布式
LUCIAZZZ3 小时前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
我在北京coding3 小时前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk3 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台4 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
让我上个超影吧5 小时前
黑马点评【基于redis实现共享session登录】
java·redis
沉到海底去吧Go5 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局5 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务6 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库