第一部分之字典(第四章)
Posted inspred
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一部分之字典(第四章)相关的知识,希望对你有一定的参考价值。
一,哈希表节点
哈希表节点使用dictEntry结构表示,每个dictEntry结构都保存一个键值对。
typedef struct dictEntry{
//键
void *key;
//值
union{
void *val;
uint64_t u64;
int64_t s64;
} v;
//指向下一个哈希表节点,形成链表
struct dictEntry *next;
}
二,哈希表
Redis的字典所使用的哈希表由dictht结构定义:
typedef struct dictht{
//哈西表数组
dictEntry **tables;
//哈希表大小
unsigned long size;
//哈希表大小掩码,用来计算索引值,总是等于size-1
unsigned long sizemask;
//哈希表已经有的节点数量
unsigned long used;
}
table是一个数组,数组中的每个元素都是一个指向dictEntry结构的指针,每个dictEntry结构保存者一个键值对。
size记录了哈希表的大小,即table数组的大小
used记录了哈希表目前已经有的节点(键值对)的数量
sizemask和哈希值决定一个键应该被放到table数组的哪个索引上(索引值 = hash值 / sizemask)
三,字典
Redis字典使用的哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,每个哈希表节点保存一个键值对。
Redis中的字典由dict结构表示:
typedef struct dict{
//特定类型函数
dictType *type;
//私有数据
void *privdata;
//哈希表
dictht ht[2];
//rehash索引,当rehash不在进行时,值为-1
int trehashidx;
}
以上是关于第一部分之字典(第四章)的主要内容,如果未能解决你的问题,请参考以下文章
Python面试必考重点之列表,元组和字典第四关——编写一个函数(不要使用python模块的函数),打乱列表元素的顺序/如何对列表元素进行随机排列
Android studio中如何设置控件水平四分之一为绿色,四分之三为灰色,如下图