首页 > 代码库 > redis源码分析(3)-- 基本数据结构字典dict
redis源码分析(3)-- 基本数据结构字典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源码分析(3)-- 基本数据结构字典dict
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。