快速整明白Redis中的整数集合到底是个啥「建议收藏」

快速整明白Redis中的整数集合到底是个啥「建议收藏」整数集合简介 整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。 整数集合(intset)中可

快速整明白Redis中的整数集合到底是个啥

整数集合简介

整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。

整数集合(intset)中可以保存int16_tint32_tint64_t类型的整数,而且保证整数集合中元素不会重复。

整数集合的结构

整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。

  • 编码方式(encoding)表示当前整数集合的编码方式,可以设置为:INTSET_ENC_INT16INTSET_ENC_INT32INTSET_ENC_INT64
  • 元素数量(length)表示当前整数集合的包含元素的数量,也就是保存元素的数组的长度。
  • 元素数组(contents)保存了当前整数集合的所有元素,每一个元素都是数组的一个数组项,元素按照从小到大在数组中排列,并且没有重复的元素。

当编码方式为INTSET_ENC_INT16的时候,元素数组就是一个int16_t类型的数组,数组中的每个项都是int16_t类型的整数(最小值为$-2^{15}$ = -32,768,最大值为$2^{15} – 1$ = 32,767)。

当编码方式为INTSET_ENC_INT32的时候,元素数组就是一个int32_t类型的数组,数组中的每个项都是int32_t类型的整数(最小值为$-2^{31}$ = -2,147,483,648,最大值为$2^{31} – 1$ = 2,147,483,647)。

当编码方式为INTSET_ENC_INT64的时候,元素数组就是一个int64_t类型的数组,数组中的每个项都是int64_t类型的整数(最小值为$-2^{63}$ = -9,223,372,036,854,775,808,最大值为$2^{63} – 1$ = 9,223,372,036,854,775,807)。

整数集合的升级

向整数集合添加元素的时候,如果新元素的类型比这个整数集合的编码方式还长,那么整数集合就是先进行升级,然后再把新元素添加进去。

升级的操作包括:

  • INTSET_ENC_INT16升级到INTSET_ENC_INT32
  • INTSET_ENC_INT16升级到INTSET_ENC_INT64
  • INTSET_ENC_INT32升级到INTSET_ENC_INT64

升级过程总共分为3步:

  1. 根据新元素的数据类型,增大元素数组的内存空间,同时为新元素也分配好空间。
  2. 把现有的元素都转换为新元素的数据类型,并按照从小到大的顺序放到正确的位上。
  3. 把新元素放到元素数组的最后一个位置上。

另外,整数集合是不支持降级操作的。即使元素被删除后,整数集合符合较短的编码方式,也不会有降级操作。

总结

整数集合(intset)是Redis集合数据类型的内部编码之一,可以保存int16_tint32_tint64_t类型的整数。

整数集合(intset)的结构中包含三个属性:编码方式(encoding)、元素数量(length)和元素数组(contents)。

新增的元素的类型比整数集合的编码方式还长时,该整数集合会有升级操作。整数集合不支持降级操作。

最后,谢谢你这么帅,还给我点赞关注

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

快速整明白Redis中的整数集合到底是个啥「建议收藏」

原文地址:https://www.cnblogs.com/heihaozi/archive/2022/03/15/16008592.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5439.html

(0)
上一篇 2023-05-09
下一篇 2023-05-09

相关推荐

  • Python计算tan(0)的值

    Python计算tan(0)的值Python中有一个数学库math,可以使用其中的tan函数来计算任意角度的正切值,不过需要注意的是,该函数需要的是弧度制的角度参数,而不是我们常用的角度制。

    2024-03-14
    84
  • mysql-事务_mysql事务级别

    mysql-事务_mysql事务级别1.事务(transaction) 事务是业务逻辑的一个基本的单元组成。 每一个事务由一条条sql语句组成。 和事务相关的语句(insert,delete,update)这些DML语句 事务的存在保证

    2023-04-28
    165
  • 解决Python中的__file__变量未定义的问题

    解决Python中的__file__变量未定义的问题在Python中,__file__是一个内置的变量,表示当前脚本文件的完整路径和文件名。它通常被用于在代码中获取文件所在目录的路径,或者用于读取文件的内容。

    2024-02-09
    90
  • 案例分析流程图_MySQL服务无法启动

    案例分析流程图_MySQL服务无法启动故障检测(Failure Detection)是 Group Replication 的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉。如果不将故障节点及时剔除的话,

    2023-06-14
    126
  • Anaconda – Python工程师的首选

    Anaconda – Python工程师的首选随着人工智能和大数据时代的到来,Python作为一门易学易用、功能强大的编程语言,越来越受到了工程师们的追捧。然而,众所周知,Python的环境配置和依赖管理是一件相当麻烦的事情,而Anaconda的出现解决了这个问题。Anaconda是一种用于科学计算的Python分发包,提供了Python和数千个用于科学计算的软件包的集成安装,使得Python的环境配置和依赖管理变得简单方便。因此,Anaconda成为了Python工程师们的首选。

    2024-09-04
    22
  • 使用Python OpenCV进行图像处理

    使用Python OpenCV进行图像处理随着数字技术的不断发展,图像处理在计算机视觉、机器学习、医学影像、人脸识别等领域中得到了越来越广泛的应用。Python是一种易学且强大的编程语言,在图像处理方面有很好的支持。OpenCV是一个强大的开源计算机视觉平台,尤其擅长图像和视频处理,提供了一系列易于使用的函数和工具。本文将介绍如何使用Python和OpenCV进行图像处理。

    2024-07-09
    39
  • 【计理01组05号】MySql基础课程【2.0】[通俗易懂]

    【计理01组05号】MySql基础课程【2.0】[通俗易懂]博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢

    2023-05-08
    135
  • redis持久化详解_Redis

    redis持久化详解_Redishttp://www.redis.cn/topics/persistence.html 持久化 Redis 如同其他的存储组件一样,提供了两类持久化方式:快照,和全量追加日志。 RDB – 快照 在…

    2023-02-26
    150

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注