当前位置: 首页 > news >正文

Redis数据结构——整数集合

定义

整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。
整数集合就是存放整数的一个数组,整数集合的结构体定义:

typeof struct intset {// 编码方式uint32_t  encoding;// 集合元素数量unint32_t length;// 保存元素的数组int8_t contents[]; 
} intset; 

contents数组保存的就是整数元素,这些元素从小到大排列,并且不会有重复项。

我们知道对于int类型,存在多种编码格式,我们最常见的int的编码是32位的,除此之外还有16位、64位等格式。结构体中的encoding属性用来表示当前整数的编码格式。
Redis的整数集合是支持所有的整数类型的,不管是16位还是32位。
常见的int类型的编码:

  • int16,用16位表示一个整型数字,范围是 -32768~~32767
  • int32,用32比特位表示一个整数,也是最常见的,范围是-2147483648~2147483647
  • int64,用32比特位表示一个整数,在常见的编程语言中一般命名为long类型,范围是-2^63 ~~ 2^63-1

升级

每当我们将一个新的元素添加到集合中时,并且新元素的类型比整数集合现有的所有元素的类型都要长时,整数集合就会进行升级
举个例子,当整数集合中的元素 都是32位编码时,此时向整数集合中添加一个64位的整数,此时就会发生元素类型的升级,首先将所有的元素的类型升级到64位,然后将新元素放下。
具体的过程是这三步:

  • 根据新元素类型,扩展整数集合底层数组的空间大小。
  • 将底层数组现有的所有元素转换为与新元素相同的类型,并将类型转换后的元素放到扩容后的数组中的正确位置上,同时维持元素的相对顺序不变。
  • 旧元素迁移完成后,将新元素添加到数组的合适位置。

整数集合升级机制的优点

  1. 提升灵活性:不论是何种格式下的整数,都能放入,不必担心类型异常。
  2. 节约内存:当一个数组既需要保存int16_t,又需要保存int32_t时,不需要一开始直接就申请int32_t的空间,而是在int32_t的元素未放入前,一直保持int16_t的空间,当int32_t放入时才会对数组进行升级。

整数集合是只存在升级操作,不存在降级操作,一旦对数组进行了升级,编码就会一直保持升级后的状态

相关文章:

Redis数据结构——整数集合

定义 整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。 整数集合就是存放整数的一个数组,整数集合的结构体定义: typeof struc…...

背上大书包准备面试之CSS篇

目录 H5 新特性 css3新特性? 为什么要初始化css样式? 浏览器兼容性问题? css sprites(css精灵图)? css盒模型是什么样的? 页面中一个块元素的宽度包含了盒模型中的哪些部分?…...

linux系列基本介绍

虽然我们常说Linux操作系统,这种叫法是不正确的,严格意义上讲,Linux并不是操作系统,而是属于操作系统的一个内核,inux内核提供了操作系统的核心功能,如进程管理、内存管理、文件系统等。 Linux有很多不同的…...

vue.draggable浅尝

介绍 Vue.Draggable是一款基于Sortable.js实现的vue拖拽插件。支持移动设备、拖拽和选择文本、智能滚动,可以在不同列表间拖拽、不依赖jQuery为基础、vue 2过渡动画兼容、支持撤销操作,总之是一款非常优秀的vue拖拽组件。本篇将介绍如何搭建环境及简单的…...

Tree相关

1.树相关题目 1.1 二叉树的中序遍历(简单):递归 题目:使用中序遍历二叉树 思想:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历&#xff0…...

git日常操作-案例

文章目录 查看远程有那些分支 查看远程有那些分支 git ls-remote --heads origin...

cmake链接.lib库

当使用CMake编写CMakeLists.txt文件来链接其他文件夹的.lib库文件时,你需要做以下几个步骤: 设置库文件路径: 使用 link_directories() 函数设置要搜索库文件的路径。例如: link_directories(${CMAKE_SOURCE_DIR}/path/to/libra…...

SkyWalking 部署(包含ES)

SkyWalking安装 结构 首先SkyWalking主要需要oapService、webApp、Elasticsearch(可选存储)三个,接下来讲一下这三个的安装步骤,安装过程中出现了一些细小的配置错误,导致用了快两天才弄好,麻木了&#x…...

Android学习之路(2) 设置视图

一、设置视图宽高 ​ 在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 ​ 下面是设置视图宽度和高度的示例代码: …...

SIP/VoIP之常见的视频问题

除了语音通话外,视频通话也是SIP协议通话中重要的功能,在实际应用中,经常会遇到一些视频问题,如下(以h264为例) 一、 己方未显示对方视频图像 排查方法: 查看网络抓包中有没有发给已方的视频…...

docker的服务/容器缺少vim问题

背景/问题: docker的服务/容器缺少vim问题 bash: vim: command not found 在docker的mysql服务中安装Vim 1、执行apt-get update root6d8d17e320a0:/# apt-get update问题:文件下载失败 Err:1 http://security.debian.org/debian-security buster/updates InRe…...

HCIP-OpenStack

1、OpenStack概述 OpenStack是一种云操作系统,OpenStack是虚拟机、裸金属和容器的云基础架构。可控制整个数据中心的大型计算、存储和网络资源池,所有资源都通过API或Web界面进行管理。 为什么称OpenStack是云操作系统? 云一般指云计算&…...

前端:Vue.js学习

前端:Vue.js学习 1. 第一个Vue程序2. Vue指令2.1 v-if、v-else-if、v-else2.2 v-for2.3 事件绑定 v-on:2.4 v-model 数据双向绑定2.5 v-bind 绑定属性 3. Vue组件4. Vue axios异步通信5. 计算属性6. 插槽 slots7. 自定义事件内容分发 1. 第一个Vue程序 首先把vue.js拷贝到本地…...

MySQL到Oracle快速上手

第一次做Oracle项目的时候对一些语法区别不太清楚,这里列出一些开发中发现的与MYSQL不同的点 一个用户相当于一个数据库 表空间 表空间是用于存储表、索引和其他数据库对象的逻辑存储结构。每个表空间由一个或多个数据文件组成,这些文件可以位于不同的物…...

机器人CPP编程基础-01第一个程序Hello World

很多课程先讲C/C或者一些其他编程课,称之为基础课程。然后到本科高年级进行机器人专业课学习,这样时间损失非常大,效率非常低。 C/单片机/嵌入式/ROS等这些编程基础可以合并到一门课中进行实现,这些素材已经迭代三轮以上&#xf…...

前后端分离------后端创建笔记(03)前后端对接(下)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...

Leet code1049 最后一块石头的重量II

1049 最后一块石头的重量II 【问题描述】 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉…...

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…...

LVS简介及LVS-DR搭建

目录 一. LVS简介&#xff1a; 1.简介 2. LVS工作模式&#xff1a; 3. LVS调度算法&#xff1a; 4. LVS-DR集群介绍&#xff1a; 二.LVS-DR搭建 1.RS配置 1&#xff09;两台RS&#xff0c;需要下载好httpd软件并准备好配置文件 2&#xff09;添加虚拟IP&#xff08;vip&…...

Java基础篇--日期时间类

目录 前言 Instant&#xff08;时间戳&#xff09;类 LocalData(日期)类 LocalTime(时间)类 LocalDataTime(日期时间)类 Duration(时间间隔)类 Period(日期间隔)类 Clock&#xff08;获取时区&#xff09;类 前言 在开发中经常需要处理日期和时间&#xff0c;Java提供…...

3.1《庖丁解牛:信号量(Semaphore)与互斥量(Mutex)深度剖析》

庖丁解牛:信号量(Semaphore)与互斥量(Mutex)深度剖析 001、并发编程基石:为何需要信号量与互斥量? 深夜两点,调试器停在了第187行。 一个看似简单的计数器,在双核芯片上跑了不到十分钟,数值就开始“跳变”——有时加一,有时加二,偶尔还会倒退。逻辑检查了三遍,没…...

3.4《深入浅出:轮询(Polling)与事件(Event)驱动模型》

001、开篇:从“忙等”到“响应”——理解轮询与事件的核心差异 深夜两点,示波器的波形已经乱成一团麻。我盯着屏幕,手里攥着逻辑分析仪的探头,试图找出那个丢失的传感器数据包。代码里明明写着“等待设备就绪”,但CPU使用率却飙到了98%。同事凑过来看了一眼,指着那个whi…...

龙虾-OpenClaw一文详细了解-手搓OpenClaw-1

龙虾-OpenClaw一文详细了解-手搓OpenClaw-1 这一系列我会用 Python 一步步手搓一个“可运行、可扩展、可解释”的 OpenClaw 简化版。 第一篇先不追求功能多&#xff0c;而是先搭好最重要的骨架&#xff1a;服务入口、会话并发模型、最小 Agent Loop。 0. 为什么要手搓 OpenClaw…...

TikTok搜索数据爬虫实战:用PHP+Node搞定那个烦人的x-bogus签名(附完整代码)

TikTok搜索数据爬虫实战&#xff1a;PHP与Node.js协同破解x-bogus签名 1. 为什么x-bogus成为爬虫开发者的噩梦 每次尝试抓取TikTok搜索数据时&#xff0c;开发者都会遇到那个令人头疼的x-bogus参数。这个看似随机的字符串实际上是TikTok反爬系统的核心防线之一。它通过对请求参…...

goqu性能优化实战:10个提升查询效率的关键技巧

goqu性能优化实战&#xff1a;10个提升查询效率的关键技巧 【免费下载链接】goqu SQL builder and query library for golang 项目地址: https://gitcode.com/gh_mirrors/go/goqu goqu是一款强大的Golang SQL构建和查询库&#xff0c;能够帮助开发者高效地构建和执行SQL…...

仅限首批内测用户掌握的PyTorch 3.0图优化黑盒(torch._dynamo.eval_frame._optimize_ctx),3行代码解锁Graph-Level Profiling

第一章&#xff1a;PyTorch 3.0 静态图分布式训练性能调优指南PyTorch 3.0 引入了原生静态图编译能力&#xff08;通过 torch.compile(..., dynamicFalse) 显式启用&#xff09;&#xff0c;结合 DistributedDataParallel&#xff08;DDP&#xff09;与 FSDP&#xff0c;可在多…...

突破算力边界:生成式AI与深度学习的前沿实践

在算力爆炸与算法迭代的双重驱动下,深度学习正从“感知智能”向“生成智能”实现跨越式突破,数字孪生、神经渲染、多模态交互等前沿应用,正将科幻场景照进现实。本文聚焦深度学习领域最具科技感的核心方向,结合工业级实践案例与轻量化代码演示,拆解生成式AI、Transformer架…...

LFM2.5-1.2B-Thinking-GGUF嵌入式开发应用:STM32项目代码注释与文档生成

LFM2.5-1.2B-Thinking-GGUF嵌入式开发应用&#xff1a;STM32项目代码注释与文档生成 1. 引言&#xff1a;嵌入式开发的文档困境 在STM32等嵌入式开发项目中&#xff0c;我们经常面临一个尴尬的现实&#xff1a;代码写完了&#xff0c;但注释和文档却总是"待办事项"…...

UE5第三人称相机避障实战:SpringArmComponent参数调优与常见Bug修复

UE5第三人称相机避障实战&#xff1a;SpringArmComponent参数调优与常见Bug修复 在虚幻引擎5&#xff08;UE5&#xff09;开发第三人称游戏时&#xff0c;相机系统的表现直接影响玩家的游戏体验。一个优秀的第三人称相机应该既能跟随角色流畅移动&#xff0c;又能智能避开场景障…...

OpenClaw硬件控制:Qwen3.5-9B通过串口操作物联网设备

OpenClaw硬件控制&#xff1a;Qwen3.5-9B通过串口操作物联网设备 1. 为什么选择OpenClaw控制物联网设备 去年我在搭建智能温室种植系统时&#xff0c;遇到了一个典型问题&#xff1a;市面上的物联网中台要么价格昂贵&#xff0c;要么灵活性不足。作为一个喜欢折腾的开发者&am…...