Redis的字典使用哈希表作为底层实现,一个哈希表里面有n个哈希节点,每个节点里面存储着key-value键值对

1、哈希表

    哈希表数据结构,下图:

    redis数据结构-字典

            一个空的哈希表,如下图:

    redis数据结构-字典

2、哈希表节点

    数据结构,如下:

    redis数据结构-字典

3、哈希表总结构

    redis数据结构-字典

        当多个key的hash值相同的时候,哈希表采用链式方式来解决冲突,每个哈希表节点都有一个next指针,指向下一个key的hash值相同的节点,这样,hask值相同的哈希表节点就构成了一个单向链表

4、字典

    4.1、数据结构

    redis数据结构-字典

    字典中包含2个哈希表,一般情况下只使用ht[0]哈希表,ht[1]只会在对ht[0]做rehash的时候使用

    4.2、字典的结构

    redis数据结构-字典

5、rehash

    当ht[0]随着操作的不断进行,为了让哈希表维持在一个合理的范围,会对哈希表做相应的扩展或收缩操作

    5.1、扩展

        ht[1].size = ht[0].used*2的n次方

    5.2、收缩

    ht[1].size = 第一个大于等于ht[0].used的2的n次方

    将保存在htp[0]的键值对全部rehash到ht[1],然后清空ht[0],将ht[1]设置成ht[0],在新的ht[1]上创建一个新的哈希表,待下一次rehash使用

当然rehash是渐进式的,分多次完成

转载于:https://my.oschina.net/u/172871/blog/536534

相关文章: