Redis -- set集合

挑战自己,每天进步一点点,成就将属于不停止脚步的你。


目录

 Redis集合?

集合基本命令

sadd

smembers

sismember

scard

spop

srandmember

smove

srem

集合间操作

sinter 

sinterstore

sunion

sdiff

sdiifstore


 Redis集合?

        集合就是把一些有关的数据放在一起,你可以思考一下数学中的集合,离散数学中的集合里面的元素是不区分顺序的。不同于list,list中的元素如果元素都相同,但是有两个元素的顺序不一样,那么这两个列表就不相同。

        集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中:

  • 元素之间是无序的
  • 元素不允许重复

        一个集合中最多可以存储2^32 − 1 个元素。Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。      

        下面是一个集合的图解:

集合基本命令

        集合的操作命令,都是带有S前缀的。 


sadd

        将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。

语法:sadd  key  member  [ member1  member2 ... ]

  • 时间复杂度:O(1) 
  • 返回值:本次添加成功的元素的个数。
  • 一次性可以添加多个member,多个member之间使用空格间隔。

示例

        集合石要求不能重复的:


smembers

         获取一个 set 中的所有元素,注意,元素间的顺序是无序的.

语法:smembers  key

  • 时间复杂度:O(N)
  • 返回值:所有元素的列表。

示例


sismember

        判断一个元素在不在 set 中。

语法:sismember key member

  • 时间复杂度:O(1)
  • 返回值:1 表示元素在 set 中。0 表示元素不在 set 中或者 key 不存在。

示例


scard

        全称:set cardinality。获取一个 set 的基数(cardinality),即 set 中的元素个数。这个基数可以理解为数量的意思。

语法:scard key

  • 时间复杂度:O(1)
  • 返回值:set 内的元素个数。

示例


        pop一般表示列表中的删除一个元素。但是集合的元素是无序的,因此删除是随机的。

spop

        从集合中随机删除一个member

语法:spop key  [ count ]

  • count表示删除的个数,不写的时候默认为1,删除一个,写了之后就会删除指定的count个。
  • 返回值为被删除的member的值。
  • 时间复杂度:O(N), n 是 count

示例


srandmember

        随机从set中获取一个member,该方法并不会删除该被获取的member。

语法: srandmember  key   [count]

  • 时间复杂度O(1)
  • 返回值:随机获取的一个member的值。
  • 可以指定生成的随机member的次数。

示例:

        指定count:


smove

        将一个元素从源 set 取出并放入目标 set 中

语法:smove  sourceKey  destinationKey member 

  • 时间复杂度:O(1)
  • 返回值:1 表示移动成功,0 表示失败

示例

        创建源key:

        创建destination key:

        他们都共有一个m1,然后将sourceKey中的元素移动到destinationKey当中:

        移动成功之后返回1:

        但是由于这里的destinationKey已经有一个m1,所以不会有明显的改变。

        下面移动一个其他的member:


srem

        将指定的元素从 set 中删除。

语法:srem  key  member [member ... ]

  • 时间复杂度:O(N), N 是要删除的元素个数
  • 返回值:本次操作删除的元素个数。

示例



集合间操作

       集合在算法设计和复杂性理论中也发挥着重要作用。集合的操作和性质为解决许多计算问题提供了基础,例如图论、优化问题和网络流问题等。集合是计算机科学中许多算法和数据结构的核心概念

        集合的操作并不只针对里面的元素,集合的操作还可以对两个集合本身进行操作。两个集合之间可以进行交集(inter),并集(union),差集(diff)的计算。


sinter 

        获取给定 set 的交集中的元素。

语法:sinter  key  [key... ]

  • 时间复杂度:O(N * M), N 是最小的集合元素个数. M 是最大的集合元素个数
  • 返回值:交集的元素 

示例

        求交集:


另外一个版本的求交集

sinterstore

        获取给定 set 的交集中的元素并保存到目标 set 中

语法:sinterstore  destKey  key  [ key ... ]

  • 时间复杂度:O(N * M), N 是最小的集合元素个数. M 是最大的集合元素个数
  • 返回值:交集的元素个数
  • destKey为结果集的存放目标。

 示例

        设置两个setkey

        执行交集操作:

        查看结果:


sunion

        求多个集合中的并集。

语法:sunion  key  [ key ... ]

  • 时间复杂度:O(N), N 给定的所有集合的总的元素个数
  • 返回值:并集的元素。

示例


sunionstore

        获取给定 set 的并集中的元素并保存到目标 set 中。

语法:sunionstore destination key [key ...]

  • 时间复杂度:O(N), N 给定的所有集合的总的元素个数.
  • 返回值:并集的元素个数。

示例


sdiff

        获取给定 set 的差集中的元素。

语法:SDIFF key [key ...]

  • 时间复杂度:O(N), N 给定的所有集合的总的元素个数.
  • 返回值:差集的元素。

示例

        反过来:


sdiifstore

        获取给定 set 的差集中的元素并保存到目标 set 中。

语法:SDIFFSTORE destination  key [key ...]

  • 时间复杂度:O(N), N 给定的所有集合的总的元素个数.
  • 返回值:差集的元素个数。

示例

        使用sdiifstore:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2月比赛合集】28场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 Kaggle(2场比赛)阿里天池(…

两种添加删除属性字段的方法

水经微图(简称“微图”)中的图层均有属性字段,无论是复合图层,还是点线面图层的字段都可以根据实际情况进行添加或删除。 这里,就为你分享两种添加删除字段的方法。 添加删除字段方法一 当需要添加删除图层的属性字…

2024年【G1工业锅炉司炉】免费试题及G1工业锅炉司炉模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉免费试题根据新G1工业锅炉司炉考试大纲要求,安全生产模拟考试一点通将G1工业锅炉司炉模拟考试试题进行汇编,组成一套G1工业锅炉司炉全真模拟考试试题,学员可通过G1工…

算法--数论

这里写目录标题 质数(素数)定义判断是否为质数暴力写法,试除法基本思想具体写法 优化基本思想(时间复杂度根号n)具体写法 分解质因数分析题意暴力写法基本思想具体代码 优化基本思想(时间复杂度小于等于根号…

12种算法优化CNN-BiLSTM-Attention多特征输入单步预测,机器学习预测全家桶,持续更新,MATLAB代码...

截止到本期,一共发了12篇关于机器学习预测全家桶MATLAB代码的文章。参考文章如下: 1.五花八门的机器学习预测?一篇搞定不行吗? 2.机器学习预测全家桶,多步预测之BiGRU、BiLSTM、GRU、LSTM,LSSVM、TCN、CNN&…

问题:0xc8前面加(byte) #人工智能#学习方法的原因是因为0xc8大于??????????? 。 #微信#其他#微信

问题:0xc8前面加(byte)的原因是因为0xc8大于??????????? 。 参考答案如图所示

一文讲透ast.literal_eval() eval() json.loads()

文章目录 一文讲透ast.literal_eval() eval() json.loads()1. ast.literal_eval()2. eval()3. json.loads()4. 总结 一文讲透ast.literal_eval() eval() json.loads() 在Python库中,我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下&#…

IDEA如何进行远程Debug调试(二)解决jar包运行报错的问题

一、解决jar包运行报错的问题 上文提到在进行debug远程调试的时候,打包后的jar包本地无法运行,报如下的错误 ​​​​​​​IDEA如何进行远程Debug调试-CSDN博客 查看报错是找不到对应的类,那么我们使用jd-gui的反编译工具,看看…

react 使用react-seamless-scroll实现无缝滚动

文章目录 1. 实现无缝滚动效果2. react-seamless-scroll 无缝滚动案例介绍3. react 项目集成3.1 项目引入 cssSeamlessScroll 滚动组件3.2 完整代码3.2.1 newBet.tsx 代码3.2.2 index.module.scss 1. 实现无缝滚动效果 实现单步向下滚动点击更多展开,收起&#xff0…

5. RabbitMQ工作模式——RabbitMQ

5. RabbitMQ工作模式——RabbitMQ 5.1. Work queues工作队列模式 5.1.1. 模式说明 Work Queues与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。 应用场景:对于 任务过重或任务较多情况使用工作队列可…

HarmonyOS ArkTS Blank基本使用(十九)

Blank空白填充组件,在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力。仅当父组件为Row/Column/Flex时生效。 接口 Blank(min?: number | string) 从API version 9开始,该接口支持在ArkTS卡片中使用。 示例1: Blan…

vulhub中 Apache Airflow Celery 消息中间件命令执行漏洞复现(CVE-2020-11981)

Apache Airflow是一款开源的,分布式任务调度框架。在其1.10.10版本及以前,如果攻击者控制了Celery的消息中间件(如Redis/RabbitMQ),将可以通过控制消息,在Worker进程中执行任意命令。 1.利用这个漏洞需要控…