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

Redis系列之底层数据结构整数集IntSet

Redis系列之底层数据结构整数集IntSet

什么是IntSet

IntSet,整数集合,是Redis集合类型的一种底层数据结构,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会选用intset作为底层实现。

IntSet的数据结构

查看redis6.0源码,https://github.com/redis/redis/blob/6.0/src/intset.h,inset的数据结构如图:

typedef struct intset {uint32_t encoding;uint32_t length;int8_t contents[];
} intset;
  • encoding:表示编码方式,取值有:INTSET_ENC_INT16,INTSET_ENC_INT32,INTSET_ENC_INT64
  • length:代表存储的整数的个数
  • contents:实际存储数值的连续内存区域,本质是一个数组。各个项在数组中按值的大小从小到大有序排序,且数值中不包含重复项。总而言之,就是一个有序不重复的数组。

intset数据结构图:
在这里插入图片描述

set集合什么时候使用inset存储?

Redis中使用intset或者hashtable存储set。什么情况使用intset存储?

当集合对象可以同时满足以下两个条件时,使用intset:

  1. 集合对象保存的所有元素都是整数值,如果不是整数值使用dictht hash表(数组+链表)
  2. 集合对象保存的元素数量不超过512个,如果超过512个元素,使用hashtable

跟一个Redis配置有关系:

 set-max-intset-entries 512

intset数据结构和dictht hash对比,这个dictht hash就是Redis中另外一种重要的数据结构dict
在这里插入图片描述

拓展知识点

整数集合的升级过程
例如在一个int16类型的整数集合中插入一个int32类型的值,整个集合的所有元素都会转换成32类型。整个过程有3步:

  • 根据新元素的类型,扩展整数集合底层数组的空间大小,并为新元素的分配空间。
  • 将底层数组现有的所有元素都转换成与新元素相同的类型,并将类型转换后的元素放置到正确的位上,放置过程需要维持有序性。
  • 最后改变encoding的值,length+1。
    ps:那么如果删除刚加入的int32类型时,会不会做一个降级操作呢?不会。主要还是减少开销的权衡。

相关文章:

Redis系列之底层数据结构整数集IntSet

Redis系列之底层数据结构整数集IntSet 什么是IntSet IntSet,整数集合,是Redis集合类型的一种底层数据结构,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会选用intset作为底层实现。 IntSet的数…...

外包公司名单一览表(成都)

大家好,我是苍何。 之前写了一篇武汉的外包公司名单,评论区做了个简单统计,很多人说,在外包的日子很煎熬,不再想去了。 有小伙伴留言说有些外包会强制离职,不行就转岗,让人极度没有安全感。 这…...

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…...

STM32 FreeRTOS消息队列

队列简介 队列是任务间通信的主要形式。 它们可以用于在任务之间以及中断和任务之间发送消息。 队列是线程安全的数据结构,任务可以通过队列在彼此之间传递数据。有以下关键特点: FIFO顺序:队列采用先进先出 (FIFO) 的顺序,即先…...

Datawhale-self-llm-Phi-4 Langchain接入教程

本项目是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者…...

窥探QCC518x/308x系列与手机之间的蓝牙HCI记录与分析 - 手机篇

今天要介绍给大家的是, 当我们在开发高通耳机时如果遇到与手机之间相容性问题, 通常会用Frontline或Ellisys的Bluetooth Analyzer来截取资料分析, 如果手边没有这样的仪器, 要如何窥探Bluetooth的HCI log.这次介绍的是手机篇. 这次跟QCC518x/QCC308x测试的手机是Samsung S23 U…...

Golang Gin系列-1:Gin 框架总体概述

本文介绍了Gin框架,探索了它的关键特性,并建立了简单入门的应用程序。在这系列教程里,我们会探索Gin的主要特性,如路由、中间件、数据库集成等,最终能使用Gin框架构建健壮的web应用程序。 总体概述 Gin是Go编程语言的…...

CF986 div2 ABCD补题

//***不知道在不在进步 A 注意点&#xff1a;其实这个暴力就行&#xff0c;但有个限制&#xff0c;就是最多走100遍如果不到那就一定到不了。其实我感觉10遍就可以了&#xff0c;但WA了。不管怎么说&#xff0c;100遍不超时而且稳对。 代码&#xff1a; #include<bits/s…...

Ubuntu 22.04 上安装和使用 ComfyUI

在 Ubuntu 22.04 上安装和使用 ComfyUI可以按照以下步骤进行&#xff1a; 安装前的准备 确保系统更新到最新 打开终端并运行&#xff1a; sudo apt update sudo apt upgrade安装 Python 3 和 pip 如果没有安装 Python 3 和 pip&#xff0c;可以通过以下命令进行安装&#xff1…...

用户中心项目教程(一)--Ant design pro初始化的学习和使用

文章目录 1.项目定位2.项目开发流程3.需求分析4.技术选型5.Ant design pro初始化5.1快速使用5.2初始化过程 6.项目依赖的报错处理6.1项目出现的问题6.2怎么查看问题6.3怎么解决报错6.4关于pnpm的安装 7.项目启动和运行7.1项目如何启动7.2双击跳转7.3登录和注册7.4页面分析7.5关…...

分频器code

理论学习 数字电路中时钟占有非常重要的地位。时间的计算都依靠时钟信号作为基本单元。一般而言&#xff0c;一块板子只有一个晶振&#xff0c;即只有一种频率的时钟&#xff0c;但是数字系统中&#xff0c;经常需要对基准时钟进行不同倍数的分频&#xff0c;进而得到各模块所需…...

C#中字符串方法

字符串属性&#xff1a;Lenght 长度比最大索引大1 string str "frerfgd"; 1.可以通过索引&#xff0c;获取字符串中的某一个字符&#xff0c;下标“0&#xff0c;1.......” Console.WriteLine(str[0]);//f Console.WriteLine(str[1]);//r //Console.WriteLine(s…...

Python毕业设计选题:基于django+vue的二手电子设备交易平台设计与开发

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 设备类型管理 设备信息管理 系统首页 设备信息…...

【愚公系列】《微信小程序与云开发从入门到实践》059-迷你商城小程序的开发(加入购物车与创建订单功能开发)

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

Mac Android studio :gradle 配置、代理设置、及各种环境变量配置;

mac 安装 AS&#xff0c;最烦人的就是这些配置了&#xff08;吐槽一下&#xff1a;这软件真是垃圾的一批&#xff0c;同样的代码换了电脑就没法用&#xff0c;比 vscode 甚至比低评分的xcode还差劲&#xff01;&#xff09; --------------------- 一、 gradle 下载及环境变量…...

unity——Preject3——开始界面拼面板

目录 1.创建panel&#xff0c;去掉panel自带的image&#xff0c;自己加一个image&#xff0c;使用锚点分配好 2.锚点&#xff08;快捷键点击后 ALTShift&#xff09; 锚点是什么&#xff1f; 锚点的实际例子 例子1&#xff1a;固定在父容器的中心 例子2&#xff1a;对齐到…...

【达梦数据库(Oracle模式)】如何将视图中的数据导出

在某些情况下&#xff0c;我们需要将生产环境某个模式下的数据导入到开发电脑中&#xff0c;因为正式环境无法连接外网数据。 方式一&#xff1a;将视图查询出来&#xff0c;然后右键导出所有查询结果&#xff08;不推荐&#xff09; 优点&#xff1a;方便快捷 缺点&#xff1…...

GB44495-2024 汽车整车信息安全技术要求 - V2X部分前置要求

背景 GB 44495-2024《汽车整车信息安全技术要求》中关于V2X&#xff08;车与外界通信&#xff09;的部分&#xff0c;主要关注于通信安全要求&#xff0c;旨在确保车辆在与外部设备进行数据交互时的信息安全。其测试大致可分为消息层&#xff08;数据无异常&#xff09;、应用…...

FastAPI 应用的容器化与 Docker 部署:提升性能与可扩展性

FastAPI 应用的容器化与 Docker 部署&#xff1a;提升性能与可扩展性 目录 &#x1f433; 使用 Docker 容器化 FastAPI 应用⚙️ 使用 Docker Compose 管理多个服务的部署&#x1f680; 在 Docker 容器中部署与运行 FastAPI 应用 1. &#x1f433; 使用 Docker 容器化 FastAPI…...

QT入门的一些吐槽

QT入门的一些吐槽 看了网上的一些介绍QT的课程&#xff0c;看了一些讲述qt的书籍&#xff0c;然而再想自己做一个项目的时候&#xff0c;却发现我好像什么都不会&#xff0c;QT对我来说就是一个黑盒子。 我只会&#xff1a; 使用QT Creator创建一个项目&#xff0c;再UI文件中…...

4.Spring AI Prompt:与大模型进行有效沟通

1.什么是提示词 在人工智能领域&#xff0c;提示词&#xff08;Prompt&#xff09;扮演着至关重要的角色&#xff0c;它宛如一把精准的钥匙&#xff0c;为 AI 大模型开启理解之门。作为向模型输入的关键信息或引导性语句&#xff0c;提示词能够助力模型迅速洞悉问题需求&#…...

深入内核讲明白Android Binder【二】

深入内核讲明白Android Binder【二】 前言一、Binder通信内核源码整体思路概述1. 客户端向服务端发送数据流程概述1.1 binder_ref1.2 binder_node1.3 binder_proc1.4 binder_thread 2. 服务端的binder_node是什么时候被创建的呢&#xff1f;2.1 Binder驱动程序为服务创建binder…...

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG

注&#xff1a;本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态&#xff1a;SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层&#xff0c;有个 FLAGS 字段&#xff0c;这个字段有…...

WXML模版语法-事件绑定

知识点1&#xff1a;什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理。 知识点2&#xff1a;小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开&#xff0c;类似于…...

楚慧杯Web

WEB1 计算器 import requests rrequests.session() data{"answer":0} url"" for i in range(30):if i0:rrequests.get(url)dr.textdd.split(":")[22][1:].split("<br>")[0]data["answer"]str(eval(d))print(eval(d)…...

工商业储能电站能量管理本地系统及多站点云平台

一、储能站就地监控 Acre1-2000MG储能能量管理系统是针对工商业储能电站研制的本地化能量管理系统&#xff0c;可实现了储能电站的数据采集、数据处理、数据存储、数据查询与分析、可视化监控、报警管理、统计报表、策略管理、历史曲线等功能。其中策略管理&#xff0c;支持多…...

HTML标签笔记

黑马程序员视频地址&#xff1a;黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 标题与段落 标题 <h1>~<h6> 段落 <p…...

pthread_create函数

函数原型 pthread_create 是 POSIX 线程&#xff08;pthread&#xff09;库中的一个函数&#xff0c;用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…...

C# 并发和并行的区别--16

目录 并发和并行 一.并发 定义 特点 代码示例 代码解释 二.并行 定义 特点 在C#中的体现 代码示例 代码解释 三.并发和并行的区别 四 .如何在C#中选择并发还是并行 1.考虑任务类型 2.代码示例 3.注意事项 五.总结 并发和并行 在编程领域,并发和并行是两个密切…...