在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