美文网首页
搞懂Redis(二):Redis的五大基本类型底层数据结构

搞懂Redis(二):Redis的五大基本类型底层数据结构

作者: 高19 | 来源:发表于2022-04-11 16:37 被阅读0次

Redis内部存储结构

Redis内部的存储结构是一个大的hashmap,内部是数组实现的hash,key冲突通过挂链表去实现,每个dictEntry为一个key/value对象,value为定义的redisObject.
结构图如下:


Redis结构图

dictEntry的结构体如下:

/*
 * 字典
 */
typedef struct dictEntry {
    // 键
    void *key;
    // 值
    union {
        // 指向具体redisObject
        void *val;
        // 
        uint64_t u64;
        int64_t s64;
    } v;
    // 指向下个哈希表节点,形成链表
    struct dictEntry *next;
} dictEntry;
  • redisObject的内部结构
/*
 * Redis 对象
 */
typedef struct redisObject {
    // 类型 4bits
    unsigned type:4;
    // 编码方式 4bits
    unsigned encoding:4;
    // LRU 时间(相对于 server.lruclock) 24bits
    unsigned lru:22;
    // 引用计数 Redis里面的数据
    // 可以通过引用计数进行共享 32bits
    int refcount;
    // 指向对象的值 64-bit
    void *ptr;
} robj;

*ptr指向具体的数据结构的地址;type表示该对象的类型,即String,List,Hash,Set,Zset中的一个,但为了提高存储效率与程序执行效率,每种对象的底层数据结构都可能不止一种,encoding表示对象底层所使用的编码.
Redis对象底层的八种数据结构
1 REDIS_ENCODING_INT (long类型的整数)
2 REDIS_ENCODING_EMBSTR embstr (编码的简单动态字符串)
3 REDIS_ENCODING_RAW (简单动态字符串)
4 REDIS_ENCODING_HT (字典)
5 REDIS_ENCODING_LINKEDLIST (双端链表)
6 REDIS_ENCODING_ZIPLIST (压缩列表)
7 REDIS_ENCODING_INTSE (整数集合)
8 REDIS_ENCODING_SKIPLIST (跳跃表和字典)
以下是每种数据类型使用的数据结构


5种类型使用的数据结构

相关文章

网友评论

      本文标题:搞懂Redis(二):Redis的五大基本类型底层数据结构

      本文链接:https://www.haomeiwen.com/subject/shbysrtx.html