字典是一种用于保存键值对的抽象数据结构,在字典中一个键(key)可以和一个值(value)进行关联,这些关联的键和值就称为键值对,字典中的每个键都是独一无二的。
1. 字典的实现
redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。
1.1 哈希表
redis字典所使用的哈希表由dict.h/dictht
结构定义:
typedef struct dictht {
//哈希表数组
dictEntry **table;
//哈希表大小
unsigned long size;
//哈希表大小掩码,用于计算索引值
//总是等于size-1
unsigned long sizemask;
//该哈希表已有节点的数量
unsigned long used;
} dictht;
table属性是一个数组,数组中每个元素都是指向一个dict.h/dictEntry
结构的指针,每个dictEntry结构保存着一个键值对。size属性记录了哈希表的大小,也即是table数组的大小,而used属性则记录了哈希表目前已有节点(键值对)的数量。sizemask属性的值总是等于size-1,这个属性和哈希表一起决定一个键应该被放到table数组的哪个索引上面。如图是一个大小为4的空哈希表(没包含任何键值对)。