猿问
下载APP

redis hash 操作 需要实现 hashcode 吗?

redis hash 操作 需要实现 hashcode 吗


繁华开满天机
浏览 155回答 1
1回答

扬帆大鱼

redis的字典底层实现为hash表、hash表由dict.h/dictht结构定义:[cpp] view plain copytypedef struts dictht{//哈希表数组dictEntry **table;//哈希表数组unsigned long size;//哈希表大小掩码,用于计算索引值//总是等于size-1unsigned long sizemask;//该hash表已有节点的数量unsigned long used;}dictth;table属性是一个数组,每个元素指向一个 hash表节点的指针。hash表节点的由dict.h/dictEntry结构定义[cpp] view plain copy<pre name="code" class="cpp">typedef struts dictEntry{//键void *key;//值union{void *val;uint64_tu64;int64_ts64;}//指向下个hash表节点,形成链表strut dictEntry *next;}dictEntry;键值对的值可以是指针,uint64_t整数,或者是int64_t整数。next属性的作用是:如果多个键值对的hash值相同,它们会成为一个单向链表,来解决冲突。redis中的字典由 dict.h/dict结构来定义[cpp] view plain copytypedef struts dict{<pre name="code" class="cpp"><pre name="code" class="cpp"> //类型特定函数dictType *type;//私有数据void *private;//hash表dictth ht[2]//rehash索引//当rehash不再进行的时候,值为-1int trehashidx;}dict;type属性和private属性针对不同类型的键值对,用来创建多态字典。dictType结构保存了一些用于操作键值对的函数,redis会为用途不同的字典设置不同的函数。private保存了传给函数的 参数。ht属性保存了两个hash表,通常情况下只使用一个hash表,另一个hash表用作复制。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答