00:00
好,那同学们,接下来咱们就要唠一唠。从字点到我们ready object对象结构体封装它们的底层调用和实现关系,这块是重点,请务必啃下来来。首先red当中每个对象封装到我们用的程序员底层,这个层面映射了以后都是个red object对象的结构,你可以把它理解为它就是K建制队的映射。好来,首先每个建制队都会有一个dictionary entry,这个dictionary ENT就是我们K建支队,我们是不是学过哈map,哈哈,Map是不是个map ENT一回事,字典实体就是它,那么原码的位置就是在DCT.h2,也就是什么DCT.c是落地实线,DCT.h2是头文件,代表C元的定义,一个定义一个实线,大部分C都是这样的,那么来打开我们的源码bict点。
01:00
H2,好,那么来,他直接告诉你这货是什么,是哈希table的实现,那么因为它是字典嘛,字典就是K电池对KVO1的时间复杂度,一把抓下去能找到,那么杨哥这个字典和KV间质对怎么看呢?请看来我们这儿47行搁到这儿了,以后弟兄们。我们根据我们前面的介绍,这是我们7.0的这个源码啊,我们来看一眼,是不是说过一个type DeFine结构体封装了一个类叫dictionary entry字典实题我们大家都清楚啊,Write都叫什么?KV剑齿,对,那么杨哥这个K呢,在这儿,这个Y6呢?请看union又是一个。新的一个内部的类和结构体,换句话说,我们说过这个一般这个key都是string类型,而这个union请看大,这又是个V干嘛?它可以封装并支撑多种数据类型的结构,那么在这块它具体它是个值是什么,又指向另外一个支针,那么最终这个结构体里面,请看它呢,又指向下一个,最终封装了以后它呢,就叫dictionary entry,来看一下笔记。
02:22
一般我们所说的TV建筑,对是这样地,Dictionary entry表示哈希表节点的结构,因为字典就是哈希表,哈希表就是字典存放了key和value的指针,蓝色这两个啊,Key和value key是指向一个死针对象,Value既能够指向一个死称对象,也能够指向集合类型,比如说我们的list,哈希set set包括其他的是吧,什么bit map啊,什么当然bit map底层是什么,我们前面也说过了,所以T和value指针指向的是内部抽象的对象,Red当中每个对象都有red object构成,那杨哥这个red object又怎么来的呢?我们说过通过DB启动以后,我们就。
03:08
加载这些字典,启动我们对应的服务,所以这有个server.h2,请大家看。比较重要。回到这了,以后我们来看它就要指向我们的right object,完成我们对应的映射。基于此,同学们请看,也是type DeFine stress。那么搁到这儿,我们往下看每一个。Dictionary entry k建筑的实体类都映射到right object,大家老爷在哪啊?Src下面的s.H2,我们呢?找到我们s.H然后对应的找到我们的850行来,弟兄们。我们看一眼啊,在这儿就会清楚的告诉你,Object,请看。
04:08
那么这个里面又是些什么东西呢?我们后面会详细说,但是在这请同学们一定要务必注意design dictionary ENT实体,最终服务器启动以后,我们暴露出red object工程学而调用,所以这张图非常重要,从底层慢慢的往高层,高层给用户,用户应该用的是最简单的,OK,好比啊,兄弟们,我们前面讲过ready分布式锁,我们在用户这个层面大家都清楚我们用的是什么,比如说洛克,对吧,安洛克这么说能跟上,但是我们底子而言,大家都清楚是不是就是一大堆red命令加我们的lur脚本,但是下面用户这个层面用lock,按lock就搞定,分布式锁我并不清楚。例子是什么东东一样,我们design定义了结构体dictionary entry,但用户给我用的时候用的。
05:09
Object其实他们两个是ER2R1的事,说人话,我们这调洛克按洛克是不是底子就是叫掉的是我们的lur脚本呢?哎,表现上不一样,实质是统一的,那么来弟兄们,我们大家呢都会清楚,在这对应了以后,这个呢,就是我们right object,它底层数据结构这有个指针,就像指向了我们的什么那些什么哈希死称set,那么这些哈希死称list又怎么实现的呢?比如说在Java里面阿瑞list底子是什么,Object数组在JA面哈希map底子是什么?数组加链表加红黑数,那么一样,我们在red里面用了list哈希,其实质而言,底噪就是SDS双向链表,压缩链表,哈希表、跳表,整数集合等等。
06:02
这些数据内容上面说的是哈希map,下面就说的是速组加链表加红黑数,下面说的是list,哈希下面说的就是SDS双向链表、压缩列表、跳表、哈希表等等,这个就是我们的dictionary字典到red object相关的介绍。通过上一讲我们明白了底层C语言这个层面是叫dictionary entry k,禁止对字典实体,那么到用户程序员这个层面尽量往上,因为下面各种各样的数据类型高度抽象,封装以后我们都叫right object好了,那么接下来这些键值对是如何保存进ready并进行读取的呢?那么另外同学们。搁到这,这个write object,刚才我们也介绍了,这有个指针,它就指向我们具体的数据类型,好,下面它怎么来进行读取,达到了OE的时间复杂度呢?别忘了弟兄们,我们这dictionary h,人家一开篇说叫什么哈希table的实现,所以回到我们的上帝视角这张图。
07:15
麻不麻烦,看了你是不是眼花缭乱?下面杨哥给大家做一个精简,通过上面的介绍和介绍,我们都清楚了每个。都有对应的object,所以搞到这我把让你害怕的先删掉,Serve启动,我们就加载DB right DB以后加载进内存形成数据库,形成数据库了以后上去读我们的字典,形成字典以后马上去找哈希,比如说这个呢,有两个啊,其中一个就说呢,Dictionary entry kv建筑队,每个K建筑队实体而言形成我们的dictionary entry,每个dictionary entry TV建筑对封装了以后,最终操作的是red object的对象,那么来把这些整明白了以后,你会明白它源码分析design就三个,第一个write object,第二个right的数据类型。
08:15
第三,一个red编码方式,三者构成一个有机的统一体。我们说个最简单的,弟兄们假设啊,我现在set k1V1,大家肯定没问题吧,我现在type k1,他会告诉我是个string,我假设l push或者r push list123,好,我type list告诉我是个什么类型,是list类型,你怎么知道我们上面用的这些命令K建筑对,几乎就像面向对象的思想一样。好,在这儿同学们请看我们write object以后,刚才我们是不是用type啊?那杨哥你怎么知道?
09:00
看到没有,所以说你这个对象里面,就像调用这个对象的一个某个方法,某个属性一下,我就会明白它的类型,它的编码,我们是不是说过LRU最近最少使用前面的缓存淘汰策略,他会记着这个对象最近最少使用多少,然后瑞法看有多少。个指针指向我被引用,最终这个是指向数据的指针,请看我们下面这个,这就是dictionary ENT出封装了以后,实质而言,K建对就是对象,对象就是K建对每个object,实质而言,请看按照你的type类型,是类型啊,是list类型啊,是z set,是哈希还是普通的set,然后由这个指称在指线,如果你是个死周类型,死猪类型,其实底子而言是一个整数集合,或者raw,或者是emb string内嵌式的类似数据类型,我们后面会聊啊,那么list底子就是什么?我们的链表。Z set design就是我们的跳表,跳表听懂了吧,相当于说假设我现在跟你说这个是个哈西set,好,我们大家学过Java的源代码都清楚,说白了哈希菜特有没有这种数据结构,没有,因为哈希菜的底子就是个哈希map那么一样,我们在上面我们说啊杨哥,我这儿呢,比如说they at对吧,然后呢,They set怎么怎么地有分数什么什么的,我们这是叫they set,使底字而言,我们这儿其实而言,用的是人家的什么,就结构跳表。
10:33
哎,所以说你要明白这个指针就是真真正正指向我们这些底层数据结构的,基于此,我们才会有前面这些面试题。怎么着,为什么要学习这些东西?哎,相当于说假设你这是个哈希塞特,Java里面哈希塞特没有,哈赛的底层就是哈希map一样,我们这儿用的是z set,其实质而言z set没有,就叫跳表skip list,哎,它是这么来的,所以说它考的是这些辩证的这些动道,所以register object就是我们凭我们程序员使用高度抽象封装的对象,这个type和因透Ding编码,LRU引用技术和以及我们指向的底层数据结构,我们后面再给大家详细的解读。那么最终。
11:26
从头到尾的启动,以及它实现的重点,大家要清楚,这个指针就是真真正正的指向我们这些底层组织结构。好,那么同学们,这个让大家明白KV建制队到底是怎么启动,怎么存储,怎么来进行数据映射的。
我来说两句