标签:col 上进 color val 扩展 ict 大小 基本 hash表
a. 它就是一个键值对,对于hash冲突的处理采用了头插法的链式存储来解决。
b. 对rehash,扩展就是取第一个大于等于 used * 2 的2 ^ n的数作为新的hash表大小;缩紧就是取第一个大于等于 used 的2 ^ n的数作为新的hash表大小。
c. 有个负载因子的概念(负载因子 = used / size),没有执行BGSAVE或者BGREWRITEAOF时 大于1就会扩展,小于0.1就会缩紧。
d. dict结构体中是有dictht ht[2]这个成员变量的,2个是为了做rehash时交替使用的。渐进式rehash,在此过程中对于字典的删、改、查会在2个ht上面进行,而增只会在新的ht上进行。
typedef struct dictEntry { void *key; // 键 // 值 union { void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next; // 指向下个节点的指针, hash 值相同的键值对构成单向链表 头插法 } dictEntry; // 哈希表结构。 每个字典都有两个,因为我们实现了从旧表到新表的增量重写 typedef struct dictht { dictEntry **table; PORT_ULONG size; // hash 表大小 PORT_ULONG sizemask; // 哈希表大小掩码,用于计算索引值,总是等于 size - 1 PORT_ULONG used; // 节点个数 } dictht; typedef struct dict { dictType *type; // 类型特定函数 实现多态 void *privdata; // 私有数据 dictht ht[2]; // 两个 hash table PORT_LONG rehashidx; // 如果rehashidx == -1则不进行重复 int iterators; // 当前正在运行的迭代器数 } dict;
标签:col 上进 color val 扩展 ict 大小 基本 hash表
原文地址:https://www.cnblogs.com/virgosnail/p/9545179.html