set集合 结构体_HFL Redis_11_zset类型底层存储数据结构

HotFrameLearning(简称 HFL) Redis_11_zset类型底层存储数据结构

-

一、大致介绍

```

1、上一篇讲解了 set 的底层数据结构,趁热我们赶紧接下来看看 zset 数据类型吧;

2、接下来我就通过参考 redis-6.0.6 源码给大家介绍下zset的底层数据结构吧;

```

二、zset数据结构

2.1 源码详解(zaddGenericCommand)

17794be0c275be33f46020297f3cd2bc.png

图1 - zaddGenericCommand方法

a0fba2f79ac877c93701db87cf0bafe3.png

图2 - createZsetObject/createZsetZiplistObject 方法

5b7825fcd31c171b89209a3339551567.png

图3 - zsetAdd方法

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 涉及到的数据结构体

2779f7ad016a050f2dc42f35b80408d5.png

图4 - skiplist结构体

```

1、图4中,想必大家没看到 ziplist 结构体吧,因为不想重复拷贝图片,大家还是去上上篇《hash类型底层存储数据结构》去了解下ziplist吧;

2、至于说 skiplist,大家从这结构一看,和我们Java中的 skiplist 玩法一毛一样,然后举个 skiplist 的样例图如下:

80229b37dca35107c7b5e78e2cb67191.png

图5 - skiplist 样例数据结构

```

欢迎关注+点赞,您的肯定是对我最大的支持!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值