redis学习-字典
2014-10-28 16:34
183 查看
1.字典作用
实现数据库键空间(keyspace);
用作Hash类型键的底层实现之一;
2.字典实现的数据结构
MurmurHash232bit算法:这种算法的分布率和速度都非常好,具体信息请参考MurmurHash的主页:http://code.google.com/p/smhasher/。
基于djb算法实现的一个大小写无关散列算法:具体信息请参考http://www.cse.yorku.ca/~oz/hash.html。
自然rehash:ratio>=1,且变量dict_can_resize为真。
强制rehash:ratio大于变量dict_force_resize_ratio(目前版本中,dict_force_resize_ratio的值为5)
5.rehash执行过程
创建一个比ht[0]->table更大的ht[1]->table;
将ht[0]->table中的所有键值对迁移到ht[1]->table;
将原有ht[0]的数据清空,并将ht[1]替换为新的ht[0];
实现数据库键空间(keyspace);
用作Hash类型键的底层实现之一;
2.字典实现的数据结构
typedefstructdict{ //特定于类型的处理函数 dictType*type; //类型处理函数的私有数据 void*privdata; //哈希表(2个) dicththt[2]; //记录rehash进度的标志,值为-1表示rehash未进行 intrehashidx; //当前正在运作的安全迭代器数量 intiterators; }dict;
/* *哈希表 */ typedefstructdictht{ //哈希表节点指针数组(俗称桶,bucket) dictEntry**table; //指针数组的大小 unsignedlongsize; //指针数组的长度掩码,用于计算索引值 unsignedlongsizemask; //哈希表现有的节点数量 unsignedlongused; }dictht;
/* *哈希表节点 */ typedefstructdictEntry{ //键 void*key; //值 union{ void*val; uint64_tu64; int64_ts64; }v; //链往后继节点 structdictEntry*next; }dictEntry;
3.Redis目前使用两种不同的哈希算法:
MurmurHash232bit算法:这种算法的分布率和速度都非常好,具体信息请参考MurmurHash的主页:
基于djb算法实现的一个大小写无关散列算法:具体信息请参考
4.发生rehash的条件 ratio=used/size
自然rehash:ratio>=1,且变量dict_can_resize为真。
强制rehash:ratio大于变量dict_force_resize_ratio(目前版本中,dict_force_resize_ratio的值为5)
5.rehash执行过程
创建一个比ht[0]->table更大的ht[1]->table;
将ht[0]->table中的所有键值对迁移到ht[1]->table;
将原有ht[0]的数据清空,并将ht[1]替换为新的ht[0];
相关文章推荐
- Redis源码学习——字典
- Redis学习笔记---字典类型
- Redis源码学习之【哈希字典】
- Redis源码学习四、字典
- 结合redis设计与实现的redis源码学习-4-dict(字典)
- 学习笔记-Redis设计与实现-字典
- Redis源码学习4-基本数据结构之字典
- redis学习笔记(7)---压缩字典zipmap
- redis学习笔记(3)---字典dict
- Redis源码学习4-基本数据结构之字典
- Redis 学习 ---- 4.字典
- redis学习系列(五)--redis基础字典的构造
- 九 redis学习笔记之虚拟内存
- 五 redis学习笔记之pipeline
- 四 redis学习笔记之事务
- 八 redis学习笔记之主从复制
- 九.redis学习笔记之虚拟内存
- 一 redis学习笔记之环境搭建
- 八 redis学习笔记之主从复制
- 四 redis学习笔记之事务