笔记: redis的Hash数据结构结构:底层数据结构为字典(dict),每个dict记录一下数据的必要信息外,包含2个字典哈希表(dict hash table),一个默认存放数据,一个用于扩容时的中间表(类似于 GC中标记-复制法中的空闲内存作用),dictht中保存了数据的必要信息+dictEntry数组,这里的dictEntry数组个人认为近似于java中的hashmap结构,以数组+链表的形式存储了k-v对; 渐进式扩容:数据默认存放在ht[0]中,一旦触发了扩容或收缩,则将dictht[1]作为操作的中间表,具体如下: 1、为ht[1]分配空间,扩容时,大小为第一个>=(h[0]中被使用空间大小x的2倍)的偶数值(难道2x本身不就是最接近的嘛...在线疑惑)。收缩时,大小为第一个>=(h[0]中被使用空间大小x)的偶数值; 2、对ht[0]中每个kv对重新rehashcode并迁移到ht[1](渐进式rehash模式下,并不是一次性完成,而是将每个kv对的转移捆绑到客户端的增删改查指令中); 3、迁移完成,清空ht[0],设置ht[1]为默认数据存储表; 4、上述渐进式rehash过程中,如果有新插入的数据,则统一进入ht[1](即提前将ht[1]设置为默认数据存储表),增删改差等操作会在两个表上进行,先查旧表(0)再查新表(1)
点赞

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务