二十九、Redis 压缩列表的构成
压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。 一个压缩列表可以包含任意多个节点(entry), 每个节点可以保存一个字节数组或者一个整数值。 图 7-1 展示了压...
压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。 一个压缩列表可以包含任意多个节点(entry), 每个节点可以保存一个字节数组或者一个整数值。 图 7-1 展示了压...
整数集合是集合键的底层实现之一。 整数集合的底层实现为数组, 这个数组以有序、无重复的方式保存集合元素, 在有需要时, 程序会根据新添加元素的类型, 改变这个数组的类型。 升级操作为整数集合带来了操作上的灵活性, 并且尽可能地节约了内存。 ...
获取 IDEA 激活码、PyCharm 激活码、WebStorm 激活码和 DataGrip 激活码,提供详细破解教程与永久激活方法。支持 IDEA 永久激活与破解,免费获取注册码与激活码,解决 2024/2025 版本激活问题,轻松实现所有 JetBrains 工具的激活。
表 6-1 列出了整数集合的操作 API 。 表 6-1 整数集合 API 函数 作用 时间复杂度 intsetNew 创建一个新的整数集合。 intsetAdd 将给定元素添加到整数集合里面。 intsetRemove 从整数集合中移除给...
整数集合不支持降级操作, 一旦对数组进行了升级, 编码就会一直保持升级后的状态。 举个例子, 对于图 6-11 所示的整数集合来说, 即使我们将集合里唯一一个真正需要使用 int64_t 类型来保存的元素 4294967295 删除了, 整...
整数集合的升级策略有两个好处, 一个是提升整数集合的灵活性, 另一个是尽可能地节约内存。 提升灵活性 因为 C 语言是静态类型语言, 为了避免类型错误, 我们通常不会将两种不同类型的值放在同一个数据结构里面。 比如说, 我们一般只使用 in...
每当我们要将一个新元素添加到整数集合里面, 并且新元素的类型比整数集合现有所有元素的类型都要长时, 整数集合需要先进行升级(upgrade), 然后才能将新元素添加到整数集合里面。 升级整数集合并添加新元素共分为三步进行: 1、 根据新元素...
整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 它可以保存类型为 int16_t 、 int32_t 或者 int64_t 的整数值, 并且保证集合中不会出现重复元素。 每个 intset.h/intset 结构...
跳跃表是有序集合的底层实现之一, 除此之外它在 Redis 中没有其他应用。 Redis 的跳跃表实现由 zskiplist 和 zskiplistNode 两个结构组成, 其中 zskiplist 用于保存跳跃表信息(比如表头节点、表尾节...
表 5-1 列出了跳跃表的所有操作 API 。 表 5-1 跳跃表 API 函数 作用 时间复杂度 zslCreate 创建一个新的跳跃表。 zslFree 释放给定跳跃表,以及表中包含的所有节点。 , N ...
Redis 的跳跃表由 redis.h/zskiplistNode 和 redis.h/zskiplist 两个结构定义, 其中 zskiplistNode 结构用于表示跳跃表节点, 而 zskiplist结构则用于保存跳跃表节点的相关信息...