redis底层结构-哈希-字典结构
有字典作为底层实现:
typedef struct dict {
dictType *type; // 和类型相关的处理函数
void *privdata; // 上述类型函数对应的可选参数
// 两张哈希表,ht[0]为原生哈希表,ht[1]为rehash 哈希表
dictht ht[2];
// 当等于-1时表示没有在 rehash,否则表示 rehash 的下标
long rehashidx;
} dict;
dictType:类型特定函数结构
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;

dictht 哈希表结构:
typedef struct dictht {
dictEntry **table; // 哈希表数组
unsigned long size; // 哈希表数组的大小
unsigned long sizemask; // 用于映射位置的掩码,值永远等于(size-1)
unsigned long used; // 哈希表已有节点的数量
} dictht;
dictEntry 哈希表节点结构:
typedef struct dictEntry {
void *key; // 键
union { // 值
void *val;
uint64_t u64;
int64_t s64;
double d;
} v;
struct dictEntry *next; // 指向下一个哈希表节点,形成单向链表
} dictEntry;

浙公网安备 33010602011771号