redis底层结构-哈希-字典结构

有字典作为底层实现:
typedef struct dict {
    dictType *type; // 和类型相关的处理函数
    void *privdata; // 上述类型函数对应的可选参数
    // 两张哈希表,ht[0]为原生哈希表,ht[1]为rehash 哈希表
    dictht ht[2];
    // 当等于-1时表示没有在 rehash,否则表示 rehash 的下标
    long rehashidx;
} dict;

dictType:类型特定函数结构
typedef struct dictType {
    unsigned int (*hashFunction)(const void *key); // 计算哈希值的函数
    void *(*keyDup)(void *privdata, const void *key); // 复制键的函数
    void *(*valDup)(void *privdata, const void *obj); // 复制值的函数
    int (*keyCompare)(void *privdata, const void *key1, const void *key2); // 比较键的函数
    void (*keyDestructor)(void *privdata, void *key); // 销毁键的函数
    void (*valDestructor)(void *privdata, void *obj); // 销毁值的函数
} dictType;

 

 

 

dictht 哈希表结构:
typedef struct dictht {
    dictEntry **table; // 哈希表数组
    unsigned long size; // 哈希表数组的大小
    unsigned long sizemask; // 用于映射位置的掩码,值永远等于(size-1)
    unsigned long used; // 哈希表已有节点的数量
} dictht;


dictEntry 哈希表节点结构:
typedef struct dictEntry {
    void *key; // 键
    union { // 值
        void *val;
        uint64_t u64;
        int64_t s64;
        double d;
    } v;
    struct dictEntry *next; // 指向下一个哈希表节点,形成单向链表
} dictEntry;

 

posted @ 2020-09-18 16:37  zjmbk  Views(92)  Comments(0)    收藏  举报