Redis源码篇 - inset数据结构

inset是Redis中set类型的一种底层存储结构(编码),它是基于整数数组来实现的,用于存储数值类型set集合数据,并具备长度可变、有序等特征

 有序性

为了方便查找,Redis会将intset中整数数据按照从小到大的顺序排序,存放在content中,如下图:

 为什么需要统一编码?

content中的每个元素分配的长度都是相同的比如2字节、4字节、8字节,比如有些元素可以使用1字节存储,有些需要4字节存储,那么为什么要统一使用编码长度呢?
-- 是为了方便指针查找,C语言中都是通过指针的偏移来定位元素的,知道元素的长度,可以更方便偏移指针。
比如找到下标2的元素,则将指针向右偏移 : 0+2*2字节即可。

intSet动态升级

上面了解content中元素是统一编码长度的,如果新加入更大编码长度元素时,intset需要保持统一编码长度,升级当前编码类型为适合的编码类型,然后进行内存的重新分配调整过程。

此时加入元素50000,需要使用4字节存储,则循需要升级为INTSET_ENC_INT32:

注意:因为要保持编码长度统一,所以5,10,20都需要升级为32位4字节存储

升级流程 : 

  • 判断新数据50000大小,选择合适的编码类型INTSET_ENC_INT32,并按照新的编码类型计算(每个元素占4字节),并申请总空间。
  • 倒叙一次将数组中的元素拷贝到扩容后的空间中。(如果正序,5元素拷贝后会覆盖10元素原来空间内容,造成元素覆盖)
  • 完成原数据升级后,将新数据50000加入到数组尾部
  • 修改header中encoding和len信息。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43773.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商系统架构设计系列(六):电商的「账户系统」设计要特别考虑哪些问题?

上篇文章中,我给你留了一个思考题:电商的账户系统,该如何设计? 今天这篇文章,我们来说一下电商的账户系统。 引言 账户系统负责记录和管理用户账户的余额,这个余额就是每个用户临时存在电商的钱&#xff…

Jenkins从配置到实战(二) - Jenkins如何在多台机器上自动化构建

前言 jenkins除了支持在本机上进行项目构建,还可以将构建任务分发到其他远程服务器上去执行,可以实现在不同平台和架构的机器上来完成项目的自动化构建任务,也能减轻jenkins服务器的压力。本文章就主要介绍下此流程。 准备工作 准备两台机…

LeetCode[剑指Offer51]数组中的逆序对

难度&#xff1a;Hard 题目&#xff1a; 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff1a; 0 < 数组…

Unity进阶--声音管理器学习笔记

文章目录 声音管理器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class AudioManager : MyrSingletonBase<AudioManager> {//环境音private AudioSource enPlayer;//音效private AudioSource sePlayer;//音乐private Audio…

欧姆龙CX系列PLC串口转以太网欧姆龙cp1hplc以太网连接电脑

你是否还在为工厂设备信息采集困难而烦恼&#xff1f;捷米特JM-ETH-CX转以太网通讯处理器为你解决这个问题&#xff01; 捷米特JM-ETH-CX转以太网通讯处理器专门为满足工厂设备信息化需求而设计&#xff0c;可以用于欧姆龙多个系列PLC的太网数据采集&#xff0c;非常方便构建生…

Centos7:Flask-Apache部署

系列文章目录 RHCE第0章&#xff1a;RHCE开始前的准备 RHCE第1章&#xff1a;Web服务器&#xff08;上&#xff09; RHCE第1章&#xff1a;Web服务器&#xff08;下&#xff09; RHCE第2章&#xff1a;DNS服务 RHCE第3章&#xff1a;DHCP服务器 RHCE第4章&#xff1a;Firewall…

VMware Fusion 14 Tech Preview - 适用于 Arm 的 Windows 11 上的全面 3D 加速

VMware Fusion 14 Tech Preview - 适用于 Arm 的 Windows 11 上的全面 3D 加速 VMware Fusion Tech Preview 2023 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-fusion-14/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;…

uniapp 微信小程序 input详解 带小数点的input、可查看密码的输入框input

官网文档地址 1、template <!-- 本示例未包含完整css&#xff0c;获取外链css请参考上文&#xff0c;在hello uni-app项目中查看 --> <template><view><view class"uni-common-mt"><view class"uni-form-item uni-column"&g…

LeetCode | Heap | 502.

502. IPO 是贪心算法in general。 一共两个变量&#xff1a;profit和capital。profit要求是找最大的。capital要求小于w。 两种筛选方法&#xff1a;把capital符合要求的排个序&#xff0c;找profit最大的。按照profit排序&#xff0c;从大到小找capital满足条件的。 哪种更…

前端密码加密 —— bcrypt、MD5、SHA-256、盐

&#x1f414; 前期回顾悄悄告诉你&#xff1a;前端如何获取本机IP&#xff0c;轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客前端获取 本机 IP 教程https://blog.csdn.net/m0_57904695/article/details/131855907?spm1001.2014.3001.5501 在前端密码加密方案中&#xff…

OSI七层模型和TCP/IP四层模型以及五层模型

OSI七层模型&#xff08;Open System Interconnect&#xff09;即开放系统互连参考模型&#xff0c;是由ISO&#xff08;International Organization for Standardization&#xff09;国际标准化组织提出的&#xff0c;用于计算机或通信系统间互联的标准体系。 从上到下可分为…

涵子来信——自己的电脑——谈谈想法

大家好&#xff1a; 上一次谈论了苹果的那些事&#xff0c;今天我们来聊聊电脑。 我的第一台电脑现在成了这样子&#xff1a; 很多人以为是我自己拆了电脑做研究&#xff0c;其实是我的第一台电脑&#xff0c;真的坏了。 2021年&#xff0c;我有了属于我自己的第一台电脑&am…

线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】

文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数&#xff0c;用于将实数向量转换为概率分布向量。它在多类别…

【Ansible 自动化配置管理实践】01、Ansible 快速入门

目录 一、Ansible 快速入门 1.1 什么是 Ansible ​1.2 Ansible 主要功能 1.3 Ansible 的特点 1.4 Ansible 基础架构 二、Ansible 安装与配置 2.1 Ansible 安装 2.2 确认安装 三、Ansible 配置解读 3.1 Ansible 配置路径 3.2 Ansible 主配置文件 3.3 Ansi…

【stable diffusion】保姆级入门课程04-Stable diffusion(SD)图生图-局部重绘的用法

目录 0.本章素材 1.什么是局部重绘 2.局部重绘和涂鸦有什么不同 3.操作界面讲解 3.1.蒙版模糊 3.2.蒙版模式 3.3.蒙版蒙住的内容 3.4.重绘区域 4.局部重绘的应用&#xff08;面部修复&#xff09; 5.课后训练 0.本章素材 chilloutmix模型(真人模型)百度地址&#xf…

Shedskin 使用

Shedskin是一个编译器工具&#xff0c;可以将Python代码编译为C语言。先说结论吧&#xff0c;这玩意现在就只是个玩具&#xff0c;因为使用ShedSkin编译的程序不能自由使用Python标准库&#xff0c;目前只支持大约17个常用模块&#xff1a; bisect collections ConfigParser c…

位运算修行手册

*明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&#xff08;Leetcode&#xff09;做一宿”的窘境&#xff1f;你是否也有过这样的经历&#xff0c;题型不算很难&#xff0c;看题解也能弄明白&am…

htmlCSS-----背景样式

目录 前言&#xff1a; 背景样式 1.背景颜色 background-color 2.背景图片 background-image 背景的权重比较 代码示例&#xff1a; 前言&#xff1a; 很久没写文章了&#xff0c;会不会想我呢&#xff01;今天我们开始学习html和CSS的背景样式以及文字样式&#xff…

python用selenium模拟谷歌浏览器点页面

1、cmd安装selenium&#xff0c;输入pip install selenium 2、模拟点击热搜第一条进去&#xff0c;连接如下 https://weibo.com/newlogin?tabtypeweibo&gid102803&openLoginLayer0&urlhttps%3A%2F%2Fweibo.com%2F 3、查看谷歌版本 4、并去下面下载对应版本的web…

原神盲盒风格:AI绘画Stable Diffusion原神人物公仔实操:核心tag+lora模型汇总

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 在这篇文章中&#xff0c;我们将深入探讨原神盲盒的艺术风格&#xff0c;以及如何运用AI绘画技术&#xff08;Stable Diffusion&#xff09;——来创造原神角色公仔。我们将通过实践操作让读者更好地理解这种技术&#xff0…