字典(键值对、KV、映射都是一回事)在redis中有广泛应用:redis是Key-Value数据库,就是使用字典作为底层实现的,对数据库的增删改查都基于字典实现的。除此之外,redis的哈希键底层使用字典实现,一个哈希表中包含多个哈希节点,每个哈希节点就是一个kv结构,即字典。
由于redis的数据库的kv结构太复杂了,暂且从哈希表说起
3.1 哈希表
哈希表所使用的字典定义在dict.h/dictht结构体内:
typedef struct dictht{
// 哈希表数组
dictEntry **table;
//哈希表大小
unsigned long size;
// 哈希表大小掩码,用于计算索引值
// 总是等于size-1
unsigned long sizemask;
// 该哈希表已有节点的数量
unsigned long used;
}dictht;
说明:table是一个数组,数组的元素都是一个指向dictEntry结构体的指针,每个dictEntry包含一个键值对。size记录哈希表的大小,即table数组的大小,used记录了哈希表已有节点的数量。如下图所示:
dictht结构体内有一个dictEntry,那么, dictEntry是什么鬼?
(未完待续。。。)