Redis代码分析之核心数据结构

 在Redis中核心的数据结构有以下一些:

1)dict数据结构:

typedef struct dict {
    dictType   *type;
    void       *privdata;
    dictht      ht[2];
    int         rehashidx;
    int         iterators;
} dict;

其中:

     type -- 指向一些函数。主要和特定类型key与value相关

     ht    --  HashTable数组。实际数据存放的地方。

                 存在两个数组是为了进行空间扩展和Rehash。
 

2)HashTable数据结构

typedef struct dictht {
    dictEntry **table;
    unsigned long size;
    unsigned long sizemask;
    unsigned long used;
} dictht;


 其中:

       table -- dictEntry的指针数组。每一个key经过Hash函数计算之后,得到一个dictEntry指针数组的索引值。


3)dictEntry数据结构

typedef struct dictEntry {
    void *key;
    void *val;
    struct dictEntry *next;
} dictEntry;

其中:

    key -- key数据结构。作为key来说基本上都是sds类型的robj。

    val -- value的数据结构。根据支持的类型不同会有不定的数据结构对应。但基本类型都是robj。

    next  -- 指向下一个数据结构。防止Hash冲突用。

简单立体展示一下:(有时间了再图示表示)

   dict-->ht[0]  --->dictht  --->table[0...size]--->dictEntry--->key

           ht[1]                                                              --->val

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值