码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-04-05 18:10:51      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:ash   code   链表   red   哈希表   mamicode   next   大小   bsp   

一,哈希表节点

哈希表节点使用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;

}

 

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

标签:ash   code   链表   red   哈希表   mamicode   next   大小   bsp   

原文地址:https://www.cnblogs.com/inspred/p/10659243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!