Redis之数据库空间模型

在关系型数据库如MySQL,数据库数据是按照行记录格式进行存储的。同理,我们常说Redis是一个键值对(Key-Value)构成的内存数据库,具体是以什么形式进行存储的,下面通过源码一看究竟。

数据结构

在这里插入图片描述

redis.h/redisServer中记录了一个由redis.h/redisDb结构组成的数组,这里的每一个redisDb都是一个数据库,在Redis中默认数据库数量由REDIS_DEFAULT_DBNUM参数控制,默认是16。

typedef struct redisDb {

    // 数据库键空间,保存着数据库中的所有键值对
    dict *dict;                 /* The keyspace for this DB */

    // 键的过期时间,字典的键为键,字典的值为过期事件 UNIX 时间戳
    dict *expires;              /* Timeout of keys with a timeout set */

    // 正处于阻塞状态的键
    dict *blocking_keys;        /* Keys with clients waiting for data (BLPOP) */

    // 可以解除阻塞的键
    dict *ready_keys;           /* Blocked keys that received a PUSH */

    // 正在被 WATCH 命令监视的键
    dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */

    struct evictionPoolEntry *eviction_pool;    /* Eviction pool of keys */

    // 数据库号码
    int id;                     /* Database ID */

    // 数据库的键的平均 TTL ,统计信息
    long long avg_ttl;          /* Average TTL, just for stats */

} redisDb;
复制代码
  • dict字典表数据结构存储真实的数据库数据
  • expires字典表数据结构存储的所有数据库键Key的过期时间数据

数据存储

在这里插入图片描述

之前剖析过[Redis]数据结构与对象,其中底层数据结构的实现之一是字典(hashtable)。底层基础决定高层架构,因此Redis数据库的构建、查找、新增、移除、过期等也利用字典的特性完成的。

在这里插入图片描述

  • 键Key 每个键都是一个字符串对象
  • 值Value 每个值可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象的任意一种

数据查找

在这里插入图片描述

正是使用了字典表这种哈希表形式,使得Redis的键查找的时间复杂度为O(1),查找处理速度非常快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值