HotFrameLearning(简称 HFL) Redis_11_zset类型底层存储数据结构
-
一、大致介绍
```
1、上一篇讲解了 set 的底层数据结构,趁热我们赶紧接下来看看 zset 数据类型吧;
2、接下来我就通过参考 redis-6.0.6 源码给大家介绍下zset的底层数据结构吧;
```
二、zset数据结构
2.1 源码详解(zaddGenericCommand)
1、图1中,我们可以看到一个 ZADD 命令大体执行流程,先是看看 zset 数据结构是否存在,不存在的话则构建出新对象(skiplist 或 ziplist)进行添加入参,存在的话则通过循环将入参的数据放进 zset 数据结构中,最后做出响应处理;至于这个新对象的创建,则是根据有序集合设置了不使用ziplist存储,或者第一个插入元素的长度大于设置的最大ziplist的元素长度值,则使用skiplist存储,否则使用ziplist
2、图2中,我们可以清楚的看到 skiplist、ziplist 的创建过程;
3、图3中,前半段主要针对 OBJ_ENCODING_ZIPLIST 编码类型的数据结构做处理,后半段主要针对 OBJ_ENCODING_SKIPLIST 编码类型的数据结构做处理,由此可见,set 类型的底层也有两种数据结构:skiplist 与 ziplist 两种;
```
2.2 涉及到的数据结构体
```
1、图4中,想必大家没看到 ziplist 结构体吧,因为不想重复拷贝图片,大家还是去上上篇《hash类型底层存储数据结构》去了解下ziplist吧;
2、至于说 skiplist,大家从这结构一看,和我们Java中的 skiplist 玩法一毛一样,然后举个 skiplist 的样例图如下:
```
欢迎关注+点赞,您的肯定是对我最大的支持!!!