码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-25 01:04:16      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:不同   current   技术   png   vda   image   介绍   基本   logs   

 

一、字典结构

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源码分析(3)-- 基本数据结构字典dict

标签:不同   current   技术   png   vda   image   介绍   基本   logs   

原文地址:http://www.cnblogs.com/ym65536/p/7231740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!