HFL Redis_10_set类型底层存储数据结构
HotFrameLearning(简称 HFL) Redis_10_set类型底层存储数据结构
-
一、大致介绍
```
【HFL Redis_10_set类型底层存储数据结构】1、上一篇讲解了hash的底层数据结构 , 趁热我们赶紧接下来看看 set 数据类型吧;
2、接下来我就通过参考 redis-6.0.6 源码给大家介绍下set的底层数据结构吧;
```
二、set数据结构
2.1 源码详解(saddCommand)
文章插图
图1 - saddCommand方法
文章插图
图2 - setTypeCreate方法
文章插图
图3 - setTypeAdd方法
```
1、图1中 , 我们可以看到一个 SADD 命令大体执行流程 , 先是看看 set 数据结构是否存在 , 不存在的话则构建出新对象进行添加入参 , 存在的话则通过循环将入参的数据放进 set 数据结构中 , 最后做出响应处理;
2、图2中 , 我们看到首先检查value是否是整型 , 若为整型的话则创建一个intset类型的对象;若不为整型的话则创建一个dict类型的对象;intset 结构体的 type = OBJ_SET , encoding = OBJ_ENCODING_INTSET , dict 结构体的 type = OBJ_SET , encoding = OBJ_ENCODING_HT;
3、图3中 , 前半段主要针对 OBJ_ENCODING_HT 编码类型的数据结构做处理 , 后半段主要针对 OBJ_ENCODING_INTSET 编码类型的数据结构做处理 , 由此可见 , set 类型的底层也有两种数据结构:hashTable(dict) 与 intset 两种;
```
2.2 涉及到的数据结构体
文章插图
图4 - intset结构体
文章插图
图5 - dict结构体
```
1、图4中 , intset 的数据结构大家一样就能看明白是怎么回事了 , 这里就暂不讲啦;
2、图5中 , 我们主要关注 , 数据是存放在 dictht ht[2]; 中的 , ht[0] 用于正常存放数据的 , ht[1] 用于辅助扩容用的 , 扩容完后 ht[1] 又会置位 null;
```
欢迎关注+点赞 , 您的肯定是对我最大的支持!!!
推荐阅读
- Casetify与迪斯尼合作,为iPhone和AirPods提供保护壳
- java 从零实现属于你的 redis 分布式锁
- Redis集群做法的难点,百万并发客户端「实战」
- 为什么 Redis 单线程能支撑高并发?
- Redis流行的原因
- C# Redis分布式锁 - 单节点
- flink消费kafka的offset与checkpoint
- redis 数据类型详解 以及 redis适用场景场合
- Redis入门,看这一篇就够了
- 因为一次redis缓存穿透,全面探究redis能做什么