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

读REDIS数据结构

时间:2014-07-06 13:53:52      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   数据   问题   io   

一.DICT

主要有两个问题:

1.散列冲突,解决办法是拉链法

typedef struct dictEntry {
    void *key;
    union {
        void *val;
        uint64_t u64;
        int64_t s64;
    } v;
    struct dictEntry *next;
} dictEntry;

next字段向后拉链

2.扩容时候的rehash,做类似于copy on write

typedef struct dict {
    dictType *type;
    void *privdata;
    dictht ht[2];
    int rehashidx; /* rehashing not in progress if rehashidx == -1 */
    int iterators; /* number of iterators currently running */
} dict;

ht[0] 是存储了没扩容时候的数据,ht[1]存储扩容以后的数据。如果在需要扩容的时候,任何对哈希表的操作都会从ht[0]中找到一个key rehash以后放到ht[1],逐渐把ht[0]中的数据放到ht[1],当ht[0]中全部rehash完以后,释放空间,ht[0]指向ht[1]。

 

读REDIS数据结构,布布扣,bubuko.com

读REDIS数据结构

标签:style   blog   color   数据   问题   io   

原文地址:http://www.cnblogs.com/23lalala/p/3825775.html

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