Redis数据结构与对象

2022-07-15  本文已影响0人  蓝色猫猫

1.简单动态字符串

每个sds.h/sdshdr结构表示一个SDS值,Redis是C语言写的。

image.png

与C字符串的区别:

C字符串不记录长度,如果两个C字符串前后紧挨在一起,这时候扩展前字符串时,后字符串就会被覆盖。

结构体的free,就是处理分配的空间大小,如果你要扩展的话,可以探索是否有足够空间,够的话直接修改free,不够再重分配,缩短一定不用重分配了,直接缩短就行了。

2.链表

链表广泛运用与Redis的各个功能,例如:列表键、发布与订阅、慢查询、监视器等。

image (1).png

3.字典

(1) 结构体

字典所使用的的哈希表结构:

image (2).png

我们存进去的hash键值对是哈希表的节点

image (1).png

字典的结构体:

d64ecd6c-f2f3-46ec-96b0-a16542c9b0e1.png

整个关系是:字典>哈希表>键值对

(2)存入过程

4.跳跃表

(1)跳表的实现

f82d6ecc-593f-4588-909a-783fe7474dc2.png

跳表用了两个结构体定义,相对复杂的是节点的结构体定义。

跳跃表节点

3c0bcfbb-442c-4f39-bed9-829f8802760b.png

5.整数集合

数据结构如图:

2f76af1a-e7cd-4ed7-8aa3-679b7aaa2476.png

升级与降级

升级过程:

1)根据新元素的类型,扩展数组底层的空间大小,并为新元素分配空间;

2)将底层数组的所有元素换成对应的类型,并保证有序性的情况下放在正确的位置上;

3)将新元素放入底层数组中;

升级的好处:

降级:整数集合不支持降级操作,一旦升级就不会降级。

6.压缩列表

上一篇下一篇

猜你喜欢

热点阅读