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

Redis:set类型

Redis:set类型

    • set命令
        • SADD
        • SMEMBERS
        • SISMEMBER
        • SCARD
        • SPOP
        • SRANDMEMBER
        • SMOVE
        • SREM
      • 集合间操作
        • SINTER
        • SINTERSTORE
        • SUNION
        • SUNIONSTORE
        • SDIFF
        • SDIFFSTORE
    • 内部编码
      • intset
      • hashtable


当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护集合。set维护一个不允许重复元素的无序集合,每个集合元素类型都是String


set命令

SADD
  • 将一个或多个元素添加到set中,如果不存在则创建一个集合
sadd key member [member ...]

返回本次操作添加成功的元素个数。

示例:

在这里插入图片描述

第一次saddset1不存在,此时创建集合并且插入1 2 3,返回3表示成功插入三个数字。第二次sadd,由于数字2 3已经存在,所以只插入了4 5,返回2表示成功插入两个元素。


SMEMBERS
  • 获取set中的所有元素
smembers key

示例:

查询刚才创建的set1

在这里插入图片描述


SISMEMBER
  • 判定元素是否在集合中
sismember key member

如果存在返回1,不存在返回0

示例:

在这里插入图片描述


SCARD
  • 获取集合的元素个数
scard key

返回集合的元素个数。


SPOP
  • 随机获取并删除一个或多个元素
spop key [count]

返回获取到的元素。

示例:

在这里插入图片描述

第一次spop获取元素4,既不是头也不是尾,第二次spop又得到两个随机值5 1,确实值是随机的。

官方文档中声明,spop得到的值是随机的,就算是两个相同的集合,同样的操作得到的值也不一样。因为Redis源码中给spop增加了一个生成随机成员的过程,是真正做了随机功能。


SRANDMEMBER
  • 获取set中的随即元素
srandmember key [count]

返回随机获取到的元素,count表示要获取的元素个数。

示例:

在这里插入图片描述


SMOVE
  • 将一个元素从源set移动到目的set
smove source destination member

其中source是源集合,destination是目的集合,member是被移动的元素。返回0表示移动失败,返回1表示成功。

示例:

在这里插入图片描述

此处将set2中的666元素移动到了set1中。

在移动过程中,可能出现以下两种情况:

  1. member已经在destination中存在,此时会将membersource中删除,并且spop返回1视为移动成功
  2. membersource中不存在,此时spop返回0,表示移动失败

SREM
  • 删除set中的指定元素
srem key member [member ...]

返回删除成功的元素个数。


集合间操作

除了基本的集合命令,Redis还提供了集合之间的一些命令。

SINTER
  • 对多个集合求交集
sinter key [key ...]

返回集合之间的交集。

示例:

在这里插入图片描述


SINTERSTORE
  • 求出多个集合的交集,并输出到destination
sinterstore destination key [key ...]

返回交集的元素个数。

示例:

在这里插入图片描述

此处将set1set2的交集输出到set4中,sinterstore返回3表示交集有三个元素。


SUNION
  • 得到多个set的并集
sunion key [key ...]

返回多个集合的并集。

在这里插入图片描述


SUNIONSTORE
  • 求出多个集合的并集,并输出到destination
sunionstore destination key [key ...]

返回并集中元素的个数。


SDIFF
  • 求出多个集合的差集
sdiff key [key ...]

返回差集的结果。

示例:

在这里插入图片描述

此处要注意,做差是有先后顺序的,set1 - set2set2 - set1的结果是不一样的。


SDIFFSTORE
  • 求出多个集合的差集,并输出到destination
sdiffstore key [key ...]

返回差集中元素的个数。


  • 总结
命令功能
sadd添加元素
srem删除元素
scard获取集合元素个数
sismember检测元素是否在集合中
srandmember获取随机集合元素
spop随机删除集合元素
smembers获取集合所有元素
sinter集合求并集
sinterstore集合求并集,输出到指定集合
sunion集合求交集
sunionstore集合求交集,输出到指定集合
sdiff集合求差集
sdiffstore集合求差集,输出到指定集合

内部编码

intset

整数集合,对正数进行了特定优化。当set中的元素都是整数,并且元素个数小于set-max-intset-entries(默认512个)时,Redis使用intset实现set


hashtable

当集合类型不满足以上条件,也就是成员数量太多,或者有成员不是int,那么采用hashtable哈希表来实现set



http://www.kler.cn/news/343470.html

相关文章:

  • 命令 首选项:打开用户设置(json) 导致错误 文件似乎是二进制文件,不能作为文本打开
  • Qt Qml Map-地图绘制点与圆的切线
  • 火山引擎边缘智能×扣子,拓展AI Agent物理边界
  • javascript 自定义多选框实现 ag-grid中没有原生多选框
  • 物理学基础精解【67】
  • 通知系统的设计方案
  • 项目 多人对话
  • 动态规划-路径问题——174.地下城游戏
  • bclinux安装minio和mc及从服务器上下载文件
  • C# Random类详解:生成随机数的实用指南
  • Python网络爬虫从入门到实战
  • 【大模型】RMS Normalization原理及实现
  • 安装Node.js环境,安装vue工具(最佳实践)
  • 【软件测试】最佳软件测试基础入门教程
  • urllib库的使用
  • JAIN SLEE 服务创建过程 (创建一个服务)
  • Android 无Bug版 多语言设计方案!
  • 《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调
  • 找出n个自然数(1,2,3,……,n)中取r个数的组合。
  • 这4款国产软件,免费又实用,最后一款让你手机变电脑