博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis源码阅读笔记----dict.c
阅读量:5309 次
发布时间:2019-06-14

本文共 1550 字,大约阅读时间需要 5 分钟。

dict是redis中的基本数据结构,源码中是通过hash表来实现的。项目将挑选几个主要函数和大家分享下redis源码的简洁。

对外提供增删改查的接口,如下

/* API */static unsigned int dictGenHashFunction(const unsigned char *buf, int len);static dict *dictCreate(dictType *type, void *privDataPtr);static int dictExpand(dict *ht, unsigned long size);static int dictAdd(dict *ht, void *key, void *val);static int dictReplace(dict *ht, void *key, void *val);static int dictDelete(dict *ht, const void *key);static void dictRelease(dict *ht);static dictEntry * dictFind(dict *ht, const void *key);static dictIterator *dictGetIterator(dict *ht);static dictEntry *dictNext(dictIterator *iter);static void dictReleaseIterator(dictIterator *iter);

下面就着源码和大家分享下redis源码的理解

先看dict的数据结构如下

typedef struct dictType {    unsigned int (*hashFunction)(const void *key);    void *(*keyDup)(void *privdata, const void *key);    void *(*valDup)(void *privdata, const void *obj);    int (*keyCompare)(void *privdata, const void *key1, const void *key2);    void (*keyDestructor)(void *privdata, void *key);    void (*valDestructor)(void *privdata, void *obj);} dictType; typedef struct dictht {    dictEntry **table;    unsigned long size;    unsigned long sizemask;    unsigned long used;} dictht; typedef struct dict {    dictType *type;    void *privdata;    dictht ht[2];    long rehashidx; /* rehashing not in progress if rehashidx == -1 */    unsigned long iterators; /* number of iterators currently running */} dict;  
type是hash表的内置函数,包括计算hash key,比较hash key等等。 ht[2]中的每个元素表示一张hash表。

 

转载于:https://www.cnblogs.com/real-madrid/p/7822425.html

你可能感兴趣的文章