redis的rehash设计本文思维导图如下:HashMap的rehash回顾读过HashMap源码的同学,应该都知道map在扩容的时候,有一个rehash的过程。没有读过也没有关系,可以花时间阅读下从零开始手写redis(13)HashMap源码详解简单了解下整个过程即可。HashMap的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而Has
分类:
其他好文 时间:
2020-10-12 20:17:08
阅读次数:
21
Redis一共支持5种数据结构,hash是其中的一种,在hash扩容的时候采用的是渐进式rehash的方式。要想深入理解渐进式rehash,首先要了解以下Redis中hash的数据结构。 #####哈希表节点 typedef struct dictEntry { void *key; // 键 un ...
分类:
其他好文 时间:
2020-07-12 13:53:43
阅读次数:
50
Misc rehash 是分 db 的 redis db 中的 字典什么情况下会自动 rehash redis 中的 key 淘汰, 定时被动淘汰(有2 种模式)。 另外则是每次访问到 key 都会检查一下 key 是否过期则删除(也能减少部分 key) key 的读写分多套接口,基本上读写的功能函 ...
分类:
其他好文 时间:
2020-06-15 15:58:00
阅读次数:
59
Misc /* Resize */ for (j = 0; j < dbs_per_call; j++) { tryResizeHashTables(resize_db % server.dbnum); resize_db++; } /* Rehash */ if (server.activereh ...
分类:
其他好文 时间:
2020-05-27 01:06:53
阅读次数:
83
此处我们先看一下jdk7中HashMap扩容源码? void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry<K,V> e : table) { while(null ...
分类:
编程语言 时间:
2020-05-24 21:22:32
阅读次数:
265
4.1 字典数据结构 typedef struct dict{ //类型特定函数 dictType *type; //私有数据 void *privateata; //哈希表 dictht ht[2]; //rehash 索引,rehash未进行时,值为-1 int rehashidx;}dict; ...
分类:
其他好文 时间:
2020-05-06 12:12:34
阅读次数:
56
一、底层结构剖析 我们来自顶向下来分析redis内部字典的数据结构 dict dictht 哈希表,只使用 ht[0] ht[1] 用于 rehash的临时空间 计算索引 dictEntry 存放键值对的结构体 dictType 二、拉链法解决hash碰撞 可以参考 " https://www.cn ...
分类:
其他好文 时间:
2020-05-01 16:40:45
阅读次数:
61
edis源码的dict.c主要实现了基于hash表的操作,如增删改查,对哈希表大小的扩容和缩容,以及对哈希表的rehash和增量rehash等。在源码的dictScan函数中,非常巧妙精美地实现了对哈希表的迭代查找,非常建议去看一下。 添加描述 源码地址: "dict.c" "dict.h" ...
分类:
其他好文 时间:
2020-04-23 23:26:19
阅读次数:
79
DICT Redis字典具dd有以下特点: Redis字典的底层实现为哈希表, 每个字典使用两个哈希表, 一般情况下只使用 0 号哈希表, 只有在 rehash 进行时, 才会同时使用 0 号和 1 号哈希表。 哈希表使用链地址法来解决键冲突的问题。 自动 Rehash 扩展或收缩哈希表。 对哈希表 ...
分类:
其他好文 时间:
2020-03-14 20:31:01
阅读次数:
54
次面试事故面试官:你看过哪些源码?我:都挺熟悉的面试官:对hashMap了解程度怎么样?面试官:那你能讲讲 HashMap的实现原理吗?面试官:HashMap什么时候会进行 rehash?面试官:结合源码说说 HashMap在高并发场景中为什么会出现死循环?我:…我:抱歉…面试官:嗯。面试官:… 把 ...
分类:
编程语言 时间:
2020-02-04 10:24:07
阅读次数:
98