Redis字典所使用的哈希表由dict.h/dicht结构定义(跟SDS一样也是一个结构体)
typedef struct dictht{
//哈希表底层数组
dictEntry **table;
//哈希表大小
unsigned long size;
//哈希表大小掩码,用来计算索引值的
//总是等于size - 1
unsigned long sizemask;
//该哈希表已有结点的数量
unsigned long used;
}dictht
下面简单介绍以下这几个对象
-
哈希表的底层数组table,存放的是哈希表结点,即键值对(下面会说)
-
size属性记录了哈希表的底层数组大小,即table数组的大小
-
used属性记录了哈希表目前已经有的结点数量
-
sizemask属性的值总是等于size-1,这个属性和哈希值一起决定插入进来的键值对会被放入数组里面的哪个位置。
哈希表结点
哈希表结点使用dictEntry结构表示(也是一个结构体),每个dictEntry结构都保存着一个键值对
typedef dictEntry(
//键
void *key;
//值
union{
//指针类型
void *val;
//无符号整数类型 64位
unit64_t u64;
//有符号整数类型 64位