redis源码分析-- 基本数据结构字典dict

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis源码分析-- 基本数据结构字典dict相关的知识,希望对你有一定的参考价值。

 

一、字典结构

Redis中字典采用hash表结构,如下:

typedef struct dictht {
    dictEntry **table; // hash表数组
    unsigned long size; // hash表大小
    unsigned long sizemask; // 掩码
    unsigned long used; // 已经使用的大小
} dictht;

table是一个数组,每个元素指向一个dictEntry结构。size表示hash表大小,used表示使用的大小。一个size=4的空hash表如下:

技术分享

dictEntry是一个key-value pair, 定义为:

 1 typedef struct dictEntry {
 2     void *key; // key
 3     union { 
 4         void *val;
 5         uint64_t u64;
 6         int64_t s64;
 7         double d;
 8     } v; // value
 9     struct dictEntry *next; // 指向下一个key-value
10 } dictEntry;

next指针用于解决hash冲突,redis总采用直接链址法解决冲突。举例:

技术分享

Redis中字典定义:

typedef struct dict {
    dictType *type; // type和privdata区别操作不同类型key-value
    void *privdata;
    dictht ht[2];
    long rehashidx; /* rehashing not in progress if rehashidx == -1 */
    int iterators; /* number of iterators currently running */
} dict;

ht[2]中一般只有ht[0]使用,ht[1]在rehash时使用,ht[1]和rehashindex使用后续介绍。

技术分享

 

以上是关于redis源码分析-- 基本数据结构字典dict的主要内容,如果未能解决你的问题,请参考以下文章

redis源码分析----字典dict

redis学习记录:字典(dict)源码分析

redis学习记录:字典(dict)源码分析

redis学习记录:字典(dict)源码分析

redis源码分析之数据结构--dictionary

Redis源码剖析 - Redis内置数据结构之字典dict