学习笔记-Redis设计与实现-整数集合

简介:

整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素不多时,Redis就会使用整数集合作为集合键的底层实现。

 

6.1 整数集合的实现

wKiom1ihePWiePsYAAH954NenzQ839.png

  • contents数组时整数集合的底层实现:整数集合的每个元素都是contents数组的一个数组项(item),各个项在数组中按值的大小从小到大有序地排列,

  • 并且数组中不包含任何重复项。

  • length属性记录了整数集合包含地元素数量,也即是contents数组的长度。

  • contents数组的真正类型取决于encoding属性的值

6.2 升级

 

升级整数集合并添加新元素共分为三步进行:

根据新元素的类型,扩展整数集合底层数组的空间大小,并为新元素分配空间。

将底层数组现有的所有元素都转换成与新元素相同的类型,并将类型转换后的元素放置到正确的位上,而且在放置元素的过程中,需要继续维持底层数组的有序性质不变。

将新元素添加到底层数组里面。

 

因为每次向整数集合添加新元素都可能会引起升级,而每次升级都需要对底层数组中已有的所有元素进行类型转换,所以向整数集合添加新元素的时间复杂度位O(N)

 

6.3 升级的好处

 

整数集合的升级策略有两个好处,一个是提升整数集合的灵活性,另一个是尽可能地节约内存。

 

6.3.1 提高灵活性

 

因为整数集合可以通过自动升级底层数组来适应新元素,所以可以随意地将int16_tint32_t或者int64_t类型地整数添加到集合中,而不必担心出现类型错误。

 

6.3.2 解决内存

 

可以让集合能同时保存三种不同类型地值,确保升级操作只会在又需要地时候进行,尽量节省内存。

 

6.4 降级

 

整数集合不支持降级操作,一点对数组进行了升级,编码就会一直保持升级后的状态。

 

6.5 整数集合API

wKioL1iheSvx8E4kAAbUJux2RQA092.png

6.6 重点回顾

 

  • 整数集合是集合键的底层实现之一。

  • 整数集合的底层实现为数组,这个数组以有序、无重复的方式保存结合元素,在有需要时,程序会根据新添加元素的类型,改变这个数组的类型。

  • 升级操作为整数集合带来了操作上的灵活性,并且尽可能的节约了内存。

  • 整数集合只支持升级操作,不支持降级操作。


本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1897373,如需转载请自行联系原作者
相关文章
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
736 6
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
192 5
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
1658 3
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
478 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
NoSQL Redis
redis学习五、错误总结,redis正常运行时后会出现一些bug 总结。
本文介绍了Redis在正常运行时可能遇到的一个错误,即无法进行磁盘持久化的问题,并提供了通过设置`stop-writes-on-bgsave-error`为`no`来解决这一问题的方案。
623 0
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1964 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
266 3
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
215 2
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
217 3
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
1503 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
下一篇
开通oss服务