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

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.lryc.cn/news/454292.html

相关文章:

  • 九大排序之插入排序
  • DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型
  • 基于Hive和Hadoop的电商消费分析系统
  • 记一次炉石传说记牌器 Crash 排查经历
  • 精益驱动的敏捷开发
  • SolidWorks机器转ROS2 URDF
  • (Linux驱动学习 - 6).Linux中断
  • SpringBoot驱动的明星周边产品电商解决方案
  • C++、Ruby和JavaScript
  • 32单片机 低功耗模式
  • 501、二叉搜索树中的众数
  • 【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解
  • 第18场小白入门赛(蓝桥杯)
  • Redission · 可重入锁(Reentrant Lock)
  • 初阶C语言-指针
  • 论文笔记:微表情欺骗检测
  • 智能家居有哪些产品?生活中常见的人工智能有哪些?
  • 洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载
  • 【Java】springboot 项目中出现中文乱码
  • 开放式耳机是什么意思?漏音吗?开放式的运动蓝牙耳机推荐
  • 如何优雅的处理NPE问题?
  • k8s 中存储之 NFS 卷
  • Redis中BitMap实现签到与统计连续签到功能
  • 【Spring】“请求“ 之传递 JSON 数据
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • Redis-预热雪崩击穿穿透
  • jvisualvm学习
  • Gazebo环境下开源UAV与USV联合仿真平台
  • Linux进程调度和进程切换
  • 机器学习基本上就是特征工程——《特征工程训练营》