第一部分之字典(第四章)

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;

}

 

以上是关于第一部分之字典(第四章)的主要内容,如果未能解决你的问题,请参考以下文章

yii开发第一部分之执行流程

第一部分之简单字符串SDS(第二章)

Python面试必考重点之列表,元组和字典第四关——编写一个函数(不要使用python模块的函数),打乱列表元素的顺序/如何对列表元素进行随机排列

Android studio中如何设置控件水平四分之一为绿色,四分之三为灰色,如下图

信号与系统分析2022春季作业-参考答案:第四次作业-第一部分

网络攻防第四次实验(第一部分)