Redis 字典
来源:互联网 发布:淘宝店铺装修特效 编辑:程序博客网 时间:2024/06/11 09:09
Redis Dict
字典,哈希表,HashMap仅仅是说法不同而已。本质上就是一种key,value存储,可以高效的存储和访问。
定义
typedef struct dictEntry { void *key; void *val; struct dictEntry *next;} dictEntry;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;/* This is our hash table structure. Every dictionary has two of this as we * implement incremental rehashing, for the old to the new table. */typedef struct dictht { dictEntry **table; unsigned long size; unsigned long sizemask; unsigned long used;} dictht;typedef struct dict { dictType *type; void *privdata; dictht ht[2]; int rehashidx; /* rehashing not in progress if rehashidx == -1 */ int iterators; /* number of iterators currently running */} dict;
总结
- 该哈希表使用拉链法,对于冲突的元素,用单链表链接起来。
- 当哈希表冲突严重,需要rehash的时候,需要扩大哈希表容量,使用h[1]来分配较大的空间,再把h[0]中的entry重新rehash到h[1]中去。如果h[0]元素很多,重新rehash一遍所有元素是需要花很多时间的,因此采用的思路是内部维护一个rehashidx变量,在每次访问哈希表的时候,仅对其中的一个索引链进行搬移操作。相当于把整个哈希表的rehash平均到每次的访问中,把需要较多的时间分散开来。当rehash完成后,把h[0]释放掉,h[1]赋值给h[0]即可。
- 在rehash的过程中,相当于h[0]和h[1]同时有数据,因此需要访问h[0]和h[1]。
- dictType中维护一组函数指针,用于对节点中Key和Value的通用操作。
阅读全文
0 0
- redis 字典
- Redis 字典
- Redis-字典
- REDIS字典(dict)
- Redis核心结构字典
- Redis数据类型之字典
- 重写Redis字典
- Redis 学习 ---- 4.字典
- Redis中的字典
- Redis数据结构之字典
- redis字典的实现
- redis数据结构之字典
- Redis-数据结构-3-字典
- Redis之字典
- redis 字典的实现
- Redis-数据结构-字典
- Redis数据结构-字典
- 深入redis内部--字典实现
- Java实现文件的遍历 类型匹配(图形化界面)
- 技巧_字符界面与图形界面之间的转换_telinit改变运行级别
- 机房重构——父窗体、子窗体的显示
- linux权限管理
- 给一个数字,把他分成若干份,求乘积最大
- Redis 字典
- python socket编写端口扫描器
- 设计模式6大设计原则解读——单一职责原则
- kaldi002 -- kaldi是如何使用决策树的
- 洛谷 P1402 酒店之王
- POJ 1700 Crossing River 笔记
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 458: ordinal not in range(128)
- 近期学习总结
- 投票系统片段验证篇