Redis源码分析(四)——Redis数据结构-整数集合

1. 整数集合特点

  1. 有序:集合中所有值按照从小到大顺序排列。
  2. 不重复
  3. 可以存储int16_t、int32_t、int64_t三种类型的整数

1. 数据结构

typedef struct intset{
  unit32_t encoding;
  unit32_t length;
  int8_t contents[];
} intset;
  • encoding:content数组中存储的整数类型(int16_t、int32_t、int64_t三者之一)
  • length:contents数组中元素的个数
  • contents:整数数组

2. 升级

整数集合中可以存储int16_t、int32_t、int64_t这三种类型的整数,但在任一时刻,集合中所有元素的类型都是统一的。 如果当前集合存储的元素是int16_t类型,当需要存入一个int32_t类型的整数时,Redis会分配一片新的内存空间,将每个元素的类型提升为int32_t,再将所有元素迁移至新数组中。 这就是升级的过程。

3. 降级

一旦升级了之后,即使最大的那个元素已经删除,集合元素也是不会降级的。

4. 整数集合优点

4.1 灵活

整数集合可以通过自动升级底层数组来适应新元素,所以我们可以随意地将int16_t、int32_t、int64_t类型的整数添加到集合中,而不必担心类型错误。

4.2 节约内存

如果要用一个数组同时能够保存int16_t、int32_t、int64_t这三种类型的整数,那么只能创建一个int64_t类型的数组,而Redis整数集合可以保存三种类型的整数,只有当有需要的时候才进行升级操作,因此节约了内存。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云霄雨霁

Jalangi2 API

1650
来自专栏Crossin的编程教室

【Python 第56课】 正则表达式(2)

有同学问起昨天那段测试代码里的问题,我来简单说一下。 1. r"hi" 这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。为什么要加这个?你可以试...

2656
来自专栏landv

c语言_头文件

1343
来自专栏C语言C++游戏编程

轻松学习C语言编程之函数知识详解

函数是一组一起执行任务的语句。每个C程序至少有一个函数,即main,所有最简单的程序都可以定义其他函数。您可以将代码划分为单独的函数。如何在不同的函数之间划分代...

642
来自专栏FSociety

Oracle中字符串大小比较以及数据隐式转化

首先我们得明白在数据库中单引号是用来字符串引用的,不管是数字还是时间,当你用单引号引用起来之后,数据库就会将他当成字符串来对待。

792
来自专栏JetpropelledSnake

Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

本篇目录:     一、函数嵌套     二、函数名称空间与作用域     三、函数对象     四、闭包函数 ========================...

35010
来自专栏决胜机器学习

Redis专题(二) ——Redis数据类型(2)

Redis专题(二)——Redis数据类型(2) (原创内容,转载请注明来源,谢谢) 四、列表类型(List) 列表类型可以存储一个有序的字符串列表,其存储...

3026
来自专栏乐百川的学习频道

Python 正则表达式

最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。 模式...

19410
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版5.3节C风格数据结构内存布局之数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

401
来自专栏用户2442861的专栏

static在C和C++中的用法和区别

http://blog.csdn.net/skyereeee/article/details/8000512

591

扫描关注云+社区