redis数据库查找关键在内存中的位置

redis数据库查找关键在内存中的位置
首先,需要提前了解的知识。
1、在使用每个数据库的结构redisdb存储。在这,redisdb.id门店数在redis database.redisdb.dict整数表示商店所有的图书馆核心价值观的data.redisdb.expires节省每个键的到期时间。
2、当redis服务器初始化,它会提前分配16个数据库(数可以通过配置文件配置),和所有的数据库保存到一个结构的redisserver成员redisserver.db阵列。当我们选择号码数据库,程序开关数据库直接通过redisserver DB {数量。}。有时,当一个程序需要知道你在哪个数据库,你可以阅读redisdb.id直接。
3,因为我们知道,一个数据库的所有关键值存储在redisdb.dict,我们需要知道,如果我们找到关键的位置,它是必要的了解,结构
复制代码代码如下:typedef struct { {,

特定于函数类型
dicttype *型;

私有数据处理函数类型
void * privdata;

哈希表(2)。
dictht HT { 2 };

重复 / /符号记录表,值为1表示重复不
Int rehashidx;

安全性/当前正在处理迭代器的数量
int迭代器;
字典};
正如你可以看到从上面的结构,使用字典使用哈希表作为其底层的实现。2点到哈希表的指针类型,包括0个哈希表(HT { 0 })主要用于所有的密钥存储库,和1个哈希表主要用于程序使用0个哈希表的翻版,重新添加新的值将触发,不做太多的。所以在Redis的关键搜索实际上是一种对HT { 0 }查找操作在词典结构。
4。因为这是Hashi,我们就知道会有一个哈希碰撞,所以你做什么时,多把钥匙的Hashi是同一价值Redis使用链表存储密钥的多个哈希碰撞。也就是说,当我们发现基于密钥的哈希值的列表,如果列表的长度大于1,那么我们需要遍历列表中找到我们要找的答案。当然,这个列表长度为1在一般情况下,其时间复杂度可以视为O(1)。
二,当redis获取的关键,如果你找到钥匙的位置。
通过以上的知识,我们可以在内存中找到一个关键分析redis。
1、当得到钥匙,redis来确定当前图书馆0号哈希表是空的,那就是:如果(词典-> HT { 0 }。大小= 0)。如果返回null真实直接。
2,确定0号哈希表需要重复,因为如果重复做,然后两个表可以存储的关键。如果改变正在进行,一个_dictrehashstep方法称为。_dictrehashstep用于被动重复词典数据库和哈希键。
三.计算哈希表,并根据当前的字典和键计算哈希值。
4。根据当前字典的散列值计算哈希表的索引值。
5。根据索引值将列表从哈希表中取出,遍历列表以查找密钥的位置。一般来说,链长度为1。
6、当HT { 0 }完成,然后再进行重复判断。如果它不是老调重弹,它将结束,否则345步会重复HT { 1 }。
这里我们找到了内存中键的位置。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部