一、图示的基本单位

图1-图示基本单位.png
二、整数集合的数据结构
-
整数集合由三部分组成,分别是:编码、元素数量、元素
- 编码,有三种值,INT16、INT32、INT64。表示元素的内存大小和值域
- 元素数量,记录集合中元素的数量
- 元素,存放一个一个的数字
集合中只能存在一种类型的元素。如编码为INT16,那么元素都是2字节长并且在[INT16_MIN,INT16_MAX]之间的整数。如编码为INT64,那么元素都是8字节长并且在[INT64_MIN,INT64_MAX]之间的整数
整数按从小到大的顺序存储

图2-数据结构.png
三、添加元素
元素都是INT16长度(2字节),跳过元素只要在当前地址+2字节就到达下一个元素的首地址了。其他编码类型同理,INT32(4字节),INT64(8字节)

图3-元素添加.png
四、编码升级
- 编码升级一定发生在添加元素时,redis2.6中没有编码降级操作。
- 编码升级的添加操作,新值一定添加在头或尾元素。因为升级代表新值超出当前编码的最大值或最小值,所以新值一定大于集合当前的最大值或者小于集合当前最小值

图4-编码升级.png
五、查找元素
-
按值查找节点
图5-值查找.png 按索引查找节点
根据编码获取每个节点的长度,(索引 * 每个节点的长度)就是目标节点
六、删除元素

图6-删除元素.png
