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

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:

相关文章:

Redis -- set集合

挑战自己,每天进步一点点,成就将属于不停止脚步的你。 目录 Redis集合? 集合基本命令 sadd smembers sismember scard spop srandmember smove srem 集合间操作 sinter sinterstore sunion sdiff sdiifstore Redis集合&#…...

明天是几号(c++题解)

题目描述 题目描述 在某国,每年有 个月,每个月有 天。 求 年 月 日的下一天的日期。 输入格式 第一行:两个整数 。 第二行:三个整数 输出格式 输出三个整数,表示 年 月 日的下一天的日期。 样例 样例…...

PHP安装后错误处理

一:问题 安装PHP后提示错误如下 二:解决 1:Warning: Module mysqli already loaded in Unknown on line 0解决 原因:通过php.ini配置文件开启mysqli扩展的时候,开启了多次 解决:将php.ini配置文件中多个…...

Unity3D开发之鼠标单双击判断

在开发游戏和交互式应用程序时,经常需要对用户的鼠标点击进行准确的响应。其中,单击和双击事件的判断是常见需求之一。本文将介绍如何在Unity中优雅地实现鼠标单双击判断,使代码结构清晰、易读、易维护。 背景 在许多项目中,我们…...

openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围

文章目录 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围214.1 性能因素214.2 调优范围确定 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围 数据库性能调优通常发生在用户对业务的执行效率不满意,期望通过调优加快业务执行的情况下。正…...

JAVA——Stream流

1.Stream流的作用(流水线) 结合了Lambda表达式,简化集合、数组的操作; 2.Stream流的使用步骤 ①先得到一条Stream流(流水线),并将数据放上去; ②利用Stream流中的API进行各种操作…...

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件(.xlsx格式)。该库支持多种操作,包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…...

20240131在ubuntu20.04.6下使用whisper不同模式的比对

20240131在ubuntu20.04.6下使用whisper不同模式的比对 2024/1/31 16:07 首先你要有一张NVIDIA的显卡,比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡!】 2、请正确安装好NVIDIA最新的驱动程序和CUDA。可选安装! 3、配置whisper…...

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么? 2.HTTP状态码有哪些? 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些? 4.HTTP和HTTPS有什么区别&…...

闲人闲谈PS之五十三——离散制造中的魔鬼--物料套裁

惯例闲话:最近和老婆大人商议买车事宜,闲人以为会陷入买油车还是电车的纠结,没想到老婆大人无比坚定,买电车。在买车这方面,老婆的想法居然比闲人超前。闲人对车定位在代步工具,2年前,对车还是印…...

Dell服务器iDRAC9忘记密码, 通过RACADM工具不重启 重置密码

系列文章目录 文章目录 系列文章目录前言一、RACADM工具二、linux环境1.解压安装RACADM工具测试RACADM工具重置iDRAC密码 Windows环境 前言 一、RACADM工具 RACADM工具 官网参考信息 https://www.dell.com/support/kbdoc/zh-cn/000126703/%E5%A6%82%E4%BD%95-%E9%87%8D%E7%BD…...

2024年Java架构篇之数据结构与算法面试题

2024年Java实战面试题_java 5 年 面试-CSDN博客 2024年Java架构篇之数据结构与算法面试题 1、判断一个数是否是2的N次方,比如2、4、8、16是6、10不是 1:01、2:10、3:011、4:100、7:0111、8:1000、15:01111、16:10000 if(n&(n-1) 0) 那么n就是2的次方 n > 1...

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组(n 是 10 的倍数),每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均,而更改第i 个数的代价为bi, 他想更改若干个数的值使得这10 种数出现的次数相等&…...

MySQL分区的优缺点

前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段,通过将数据划分成更小的可管理单元,我们能够提高查询性能、简化数据维护并更灵活地管理存储空间。然而,在采用分区时,我们必须认真考虑分区键的选择和实施细节&…...

2023年度总结

目录 工作读书生活展望 用一百分总结这一年,给自己打80分。 这一年中中常常,坚持踏踏实实走好每一步。 工作 项目上,先后经历了「从库恢复后自动上线」、「主动切换RTO优化」、「MGR高可用统一」,以及高可用稳定性建设等。另外&…...

aspose-words在linux上安装字体

大多数情况下,使用 Aspose.Words 将 DOC 或 DOCX 文档转换为 PDF 格式。如果需要在 Linux 计算机上执行此操作,确保 Aspose.Words 以最佳准确性渲染文档。 最常见的是,需要转换的 DOC 和 DOCX 文档是在 Windows 或 Mac OS 操作系统上使用 Microsoft Word 创建的。因此,DOC…...

SpringBoot实战项目第一天

环境搭建 后端部分需要准备: sql数据库 创建SpringBoot工程,引入对应的依赖(web\mybatis\mysql驱动) 配置文件application.yml中引入mybatis的配置信息 创建包结构,并准备实体类 完成今日开发后项目部分内容如下图示 用户注册于登录部分…...

C# 信号量(Semaphore)详细使用案例

文章目录 简介信号量的工作原理使用场景使用示例其他使用实例1. 数据库连接池管理2. 文件读写同步3. 生产者消费者问题4. 打印任务队列同步5. Web服务器并发请求限制 简介 在C#中,信号量(Semaphore)是.NET框架提供的一个同步类,位…...

《Docker极简教程》--Docker基础--Docker的基本概念

在这篇文章中我们先大致的了解以下Docker的基本概念,在后续的文章中我们会详细的讲解这些概念以及使用。 一、容器(Container) 1.1 容器的定义和特点 容器的定义 容器是一种轻量级、可移植的软件打包技术,用于打包应用及其依赖项和运行环境&#xff0c…...

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法

DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段,通过视角相关扩散模型执行得分蒸馏采样,解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...