Redis—Set数据类型及其常用命令详解

news2024/11/27 6:39:06

文章目录

  • 一、Redis概述
    • Set类型
      • 1 SADD:向集合(Set)中添加一个或多个成员
      • 2 SCARD:获取集合(Set)中成员数量
      • 3 SDIFF:获取多个集合之间的差集
      • 4 SDIFFSTORE:计算多个集合之间的差集,并将结果存储在指定的目标集合中
      • 5 SMEMBERS:获取指定集合中所有成员
      • 6 SISMEMBER:检查指定成员是否存在于集合中
      • 7 SREM:从集合中移除一个或多个成员
      • 8 SINTER:计算多个集合的交集
      • 9 SMOVE:将一个成员从一个集合移动到另一个集合


一、Redis概述

Redis概述

在这里插入图片描述

Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

1 SADD:向集合(Set)中添加一个或多个成员

在这里插入图片描述
SADD 是 Redis 中用于向集合(Set)中添加一个或多个成员的命令。

SADD key member [member ...]
  • key: 集合的键名。
  • member: 要添加到集合中的一个或多个成员。

返回值

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SADD myset "World"
(integer) 0

返回被添加到集合中的新成员的数量,不包括已经存在于集合中的成员。

行为说明

  • 对于每个指定的成员,如果该成员不在集合中,则将其添加到集合中。
  • 如果集合不存在,则会创建一个新的集合并添加指定的成员。
  • 如果指定的成员已经是集合的成员,则该成员不会重复添加,操作不产生任何变化。

集合 myset,初始时是空集合。

  1. 向集合 myset 中添加成员 "apple"
SADD myset apple

执行后,集合变为 {"apple"},返回值是:1

  1. 继续向集合 myset 中添加成员 "orange""banana"
SADD myset orange banana

执行后,集合变为 {"apple", "orange", "banana"},返回值是:2。因为 "orange""banana" 都是新添加的成员。

  1. 尝试重复添加成员 "apple"
SADD myset apple

由于 "apple" 已经是集合 myset 的成员,不会重复添加,集合保持不变。返回值是:0

使用场景

  • 集合操作:适用于需要管理独特成员集合的场景,例如存储用户的标签、记录已处理的任务等。
  • 去重:用于确保集合中的元素是唯一的,避免重复数据的存在。
  • 快速查找:集合支持快速的成员查找和操作,适合需要频繁检查成员存在性的场景。

注意事项

  • 集合中的成员是唯一的,重复添加同一成员不会导致集合内容重复。
  • 如果集合不存在,Redis 会自动创建空集合并执行添加操作。

2 SCARD:获取集合(Set)中成员数量

在这里插入图片描述
SCARD 是 Redis 中用于获取集合(Set)中成员数量的命令。

SCARD key
  • key: 集合的键名。

返回值

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SCARD myset
(integer) 2

返回集合中的成员数量。

行为说明

  • 如果指定的键不存在,返回 0,表示空集合。
  • 如果指定的键对应的值不是集合类型,会返回错误。

示例

  1. 获取集合 myset 中的成员数量:
SCARD myset

假设集合 myset 中有 3 个成员,那么返回值就是:3

  1. 获取一个空集合的成员数量:
SCARD emptyset

假设集合 emptyset 是一个空集合,返回值就是:0

注意事项

  • 如果键对应的值不是集合类型,会返回错误,因此在使用 SCARD 命令前最好确认键对应的值确实是集合类型。

3 SDIFF:获取多个集合之间的差集

在这里插入图片描述
SDIFF 是 Redis 中用于获取多个集合之间的差集(差异)的命令。

SDIFF key [key ...]
  • key: 要计算差集的集合键名,可以指定多个集合键名。

返回值

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFF key1 key2
1) "a"
2) "b"

返回一个包含差集成员的列表,即第一个集合与其他集合之间的差异部分。

行为说明

  • 对于给定的多个集合,计算它们之间的差集。
  • 结果集中包含的是第一个集合与其他集合之间的差异部分,即第一个集合中存在,而其他集合中不存在的成员。

示例

两个集合 set1set2

  1. 计算 set1set2 之间的差集:
SDIFF set1 set2

假设 set1 中有成员 {"a", "b", "c"},而 set2 中有成员 {"b", "c", "d"},那么执行上述命令后,返回值就是 {"a"},表示 set1 中存在而 set2 中不存在的成员。

Tips:

  • 差集操作只能计算两个集合之间的差异,如果需要计算多个集合之间的差集,需要多次调用 SDIFF 命令。
  • 如果指定的某个集合不存在,将视为空集合处理。

4 SDIFFSTORE:计算多个集合之间的差集,并将结果存储在指定的目标集合中

在这里插入图片描述

SDIFFSTORE 是 Redis 中用于计算多个集合之间的差集,并将结果存储在指定的目标集合中的命令。

SDIFFSTORE destination key [key ...]
  • destination: 差集结果要存储的目标集合的键名。
  • key: 要计算差集的一个或多个集合键名。

返回值

返回存储在目标集合中的成员数量。

行为说明

  • 计算多个集合之间的差集(即第一个集合与其他集合之间的差异部分),并将差集结果存储在指定的目标集合中。
  • 如果目标集合已经存在,它将被覆盖。
  • 如果指定的某个集合不存在,将视为空集合处理。

示例

两个集合 set1set2,分别包含一些成员,并且要将它们的差集存储到集合 resultSet 中。

  1. 计算 set1set2 之间的差集,并将结果存储到 resultSet
SDIFFSTORE resultSet set1 set2

假设 set1 中有成员 {"a", "b", "c"},而 set2 中有成员 {"b", "c", "d"},执行上述命令后,resultSet 将包含 {"a"},表示 set1 中存在而 set2 中不存在的成员。返回值是 1,表示结果集中有一个成员。


5 SMEMBERS:获取指定集合中所有成员

在这里插入图片描述
SMEMBERS 是 Redis 中用于获取指定集合中所有成员的命令。

SMEMBERS key
  • key: 要获取成员列表的集合键名。

返回值

redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SMEMBERS myset
1) "Hello"
2) "World"

返回一个包含集合中所有成员的列表。

行为说明

  • 返回指定集合中的所有成员。
  • 如果集合不存在(被认为是一个空集合),则返回空列表。
  • 结果集中的成员顺序不固定,因为它们是无序的。

示例

SMEMBERS myset

如果 myset 中有成员 {"member1", "member2", "member3"},那么执行上述命令后,将返回 {"member1", "member2", "member3"},即集合中的所有成员列表。

注意事项

  • 对于大型集合,考虑成员数量可能会对性能产生影响,因此在处理大型数据时需谨慎使用。
  • 集合中的成员顺序是无序的,因此不能依赖返回的顺序。

6 SISMEMBER:检查指定成员是否存在于集合中

在这里插入图片描述
SISMEMBER 是 Redis 中用于检查指定成员是否存在于集合中的命令。

SISMEMBER key member
  • key: 要检查的集合键名。
  • member: 要检查是否存在的成员。

返回值

redis> SADD myset "one"
(integer) 1
redis> SISMEMBER myset "one"
(integer) 1
redis> SISMEMBER myset "two"
(integer) 0

返回布尔值:

  • 1 表示成员存在于集合中。
  • 0 表示成员不存在于集合中或者集合本身不存在。

行为说明

  • 检查指定成员是否存在于指定的集合中。
  • 如果集合不存在,或者成员不在集合中,则返回 0
  • 如果成员存在于集合中,则返回 1

示例

集合 myset,其中包含成员 {"member1", "member2", "member3"}

  1. 检查成员 "member1" 是否存在于集合 myset 中:

    SISMEMBER myset "member1"
    

    如果 "member1" 存在于 myset 中,该命令将返回 1

  2. 检查成员 "member4" 是否存在于集合 myset 中:

    SISMEMBER myset "member4"
    

    因为 "member4" 不在 myset 中,该命令将返回 0

注意事项

  • SISMEMBER 命令在集合不存在或成员不存在时都会返回 0,因此需要根据返回值来判断具体情况。
  • 成员的存在性检查是集合操作中的常见需求,因为 Redis 的集合数据结构支持高效的成员查找和检索。

7 SREM:从集合中移除一个或多个成员

在这里插入图片描述
SREM 是 Redis 中用于从集合中移除一个或多个成员的命令。

SREM key member [member ...]
  • key: 要操作的集合键名。
  • member [member ...]: 要从集合中移除的一个或多个成员。

返回值

redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SREM myset "one"
(integer) 1
redis> SREM myset "four"
(integer) 0

返回被成功移除的成员数量,不包括不存在的成员。

行为说明

  • 从指定集合中移除一个或多个成员。
  • 如果成员在集合中不存在,则被忽略,不会报错。
  • 如果集合在执行操作前不存在,则会被视为空集合处理。

示例

集合 myset,其中包含成员 {"member1", "member2", "member3"}

  1. 移除单个成员 "member2"

    SREM myset "member2"
    

    执行后,集合 myset 中将只剩下 {"member1", "member3"}

  2. 移除多个成员 "member1""member3"

    SREM myset "member1" "member3"
    

    执行后,集合 myset 将变为空集合。

  3. 尝试移除不存在的成员 "nonexistent"

    SREM myset "nonexistent"
    

    因为 "nonexistent" 不在 myset 中,该命令不会产生任何影响,并返回 0

注意事项

  • SREM 操作是原子的,即在执行期间不会有其他客户端能够对同一集合进行操作。
  • 虽然 SREM 对不存在的成员不会报错,但执行过程中会返回实际移除的成员数量。

8 SINTER:计算多个集合的交集

在这里插入图片描述
SINTER 是 Redis 中用于计算多个集合的交集的命令。

在这里插入图片描述

SINTER key [key ...]
  • key [key ...]: 一个或多个集合键名。

返回值

返回一个包含交集成员的列表。

行为说明

  • 计算给定多个集合的交集。
  • 如果其中一个或多个集合不存在,则返回空列表(空集合)。
  • 结果集中的每个成员都是同时存在于所有输入集合中的成员。

示例

假设有两个集合 set1set2

  1. set1 中包含成员 {"member1", "member2", "member3"}
  2. set2 中包含成员 {"member2", "member3", "member4"}

计算它们的交集:

SINTER set1 set2

执行后,返回的结果将是 {"member2", "member3"},因为这两个成员是同时存在于 set1set2 中。

注意事项

  • 如果输入的集合中有一个或多个不存在,结果将是空集合。
  • SINTER 命令返回的交集结果是一个新的集合,并不会修改输入的任何集合。

9 SMOVE:将一个成员从一个集合移动到另一个集合

在这里插入图片描述
SMOVE 是 Redis 中用于将一个成员从一个集合移动到另一个集合的命令。

SMOVE source destination member
  • source: 源集合的键名。
  • destination: 目标集合的键名。
  • member: 要移动的成员。

返回值

返回整数值:

  • 1:如果成员被成功移动。
  • 0:如果成员未被移动,即成员不存在于源集合中或者成员已存在于目标集合中。

行为说明

  • 如果源集合中存在该成员,则将其从源集合移除并添加到目标集合中。
  • 如果目标集合中已经存在该成员,或者源集合中不存在该成员,则不会进行任何操作。
  • 如果源集合和目标集合是同一集合,该命令相当于什么都不做,但会返回 0

示例

两个集合 set1set2

  1. set1 中包含成员 {"member1", "member2", "member3"}
  2. set2 中包含成员 {"member4", "member5"}

移动成员 member2set1set2

SMOVE set1 set2 "member2"

执行后:

  • set1 将变成 {"member1", "member3"}
  • set2 将变成 {"member4", "member5", "member2"}
  • 返回值为 1

尝试移动不存在的成员 member6set1set2

SMOVE set1 set2 "member6"

执行后:

  • set1set2 保持不变。
  • 返回值为 0

注意事项

  • SMOVE 命令是原子的,命令执行过程中不会有其他客户端能够对这两个集合进行操作。
  • 即使源集合和目标集合是同一个集合,命令也不会报错,但返回 0

更多的Set命令可以去官网https://redis.io/docs/latest/commands/?group=set查看哦~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习之数据集 Dataset总结

数据集 Dataset MindSpore提供了基于Pipeline的数据引擎,通过Dataset和Transforms实现高效的数据预处理。它提供了内置的文本、图像、音频等数据集加载接口,并提供了自定义数据集加载接口。此外,MindSpore的领域开发库也提供了大量的预加载数…

Android Studio无法连接夜神模拟器的解决方案

一、AS检测不到夜神模拟器 1、问题描述 在按照教程【如何安装和使用Android夜神模拟器】进入夜神的bin目录,输入连接命令回车后,终端显示的already connected to 127.0.0.1:62001,但是AS的Running Devices并没有显示夜神模拟器。 2、解决方…

自动驾驶仿真测试用例(完善版本)

进一步完善上述的测试用例,并根据不同的测试准备、车辆准备、车辆状态、车辆场景、车辆执行、可变因素、具体信号状态、通过标准和预期标准来详细描述每个测试用例。 用例编号测试类型测试项目测试描述车辆准备车辆状态车辆场景车辆执行可变因素具体信号状态通过标准…

从零实现GPT【1】——BPE

文章目录 Embedding 的原理训练特殊 token 处理和保存编码解码完整代码 BPE,字节对编码 Embedding 的原理 简单来说就是查表 # 解释embedding from torch.nn import Embedding import torch# 标准的正态分布初始化 也可以用均匀分布初始化 emb Embedding(10, 32) …

ubuntu 20.04 访问csdn报错 Secure connection failed

打扰了,csdn服务器的问题,和源没关系,后面又重新测试了一下。刚好那一刻网站连上了。 暂时没有好办法,等待一段时间就连上了,改host似乎也不太行。 问题原因: 我一边更新源 sudo apt update & apt up…

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

Spring Boot启动报错Lombok supports: sun/apple javac 1.6, ECJ

版本 idea 2023.3.4 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version></dependency> 解决方式 File->Settings->Build, Execution, Deployment->Com…

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{溢出元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦&#xff0c;然后流了一身汗&#xff0c;然后没起来&#xff0c;九点多才起床背…

Android中屏蔽 电源键长按、Home键、Home长按

“电源键长按”&#xff08;globalscreen&#xff09; “Home键”&#xff08;homekey&#xff09; “Home长按”&#xff08;recentapps&#xff09; 我们可以使用广播来实现&#xff0c;如&#xff1a; [java] view plain copy print ? package com.jumpinus.test; im…

系统架构师概述

引言 系统架构设计师是项目开发活动中的众多角色之一&#xff0c;它可以是一个小组或者一个人或者是一个团队&#xff0c;架构师包含建筑师&#xff0c;设计师&#xff0c;创造者&#xff0c;缔造者&#xff0c;可以说架构师就是我们社会各个领域的创造者和缔造者。从组织上划分…

基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PID控制器 4.2 积分分离PID控制器 4.3 滑模控制器 5.完整工程文件 1.课题概述 基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器。 2.系统仿真结果 &#xff08;完…

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

如何在 Ubuntu 12.04 VPS 上安装和配置基本的 LDAP 服务器

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 LDAP&#xff08;轻量级目录访问协议&#xff09;是一种通过文件和目录层次结构管理相关信息的协议&#xff0c;它可以从集中位置管…

【嵌入式Linux】i.MX6ULL 时钟树——理论分析

文章目录 0. 时钟树结构0.1 参考手册 Chapter 18​: Clock Controller Module (CCM)0.2 时钟信号路径 1. 时钟源——晶振1.1 外部低频时钟 - CKIL1.1.1 CKIL 同步到 IPG_CLK 解释 1.2 外部高频时钟 - CKIH 和 内部振荡器1.3 总结1.4 缩写补充 2. PLL时钟2.1 i.MX6U 芯片 PLL 时…

Android Studio 安卓手机上实现火柴人动画(Java源代码—Python)

android:layout_marginLeft“88dp” android:layout_marginTop“244dp” android:text“Python” android:textSize“25sp” app:layout_constraintStart_toStartOf“parent” app:layout_constraintTop_toTopOf“parent” /> </androidx.constraintlayout.widget.…

基于顺序存储的环形队列算法库构建

学习贺利坚老师基于数组的环形队列 数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次&#xff0c;点赞6次&#xff0c;收藏6次。本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第9课时环形队列的存储及基本操…

用Visual Studio调试CMake项目并生成Visual Studio工程

一. 在Windows系统上安装CMake 访问CMake官方网站https://cmake.org/download&#xff0c;或通过文末链接下载&#xff1a;在下载页面上&#xff0c;找到并点击“Download”链接以获取最新的稳定版本的CMake。请注意&#xff0c;虽然新版本可能包含更多功能和改进&#xff0c;…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见&#xff0c;最近忙到后台消息都有些来不及看&#xff0c;非常抱歉&#xff0c;今天带来一个环形柱状图绘制的简易小代码,绘制效果如下&#xff1a; 下面直接给出完整代码&#xff0c;替换一下数据即可&#xff0c;代码都有注释的&#xff1a; 完整代码 …

Redis—SortedSet数据类型及其常用命令详解

文章目录 一、Redis概述SortedSet类型1 ZADD&#xff1a;向有序集合添加成员2 ZREM&#xff1a;从有序集合中移除一个或多个成员3 ZSCORE : 获取sorted set中的指定元素的score值4 ZRANK&#xff1a;获取sorted set 中的指定元素的排名5 ZCARD&#xff1a;获取sorted set中的元…

库卡机器人减速机维修齿轮磨损故障

一、KUKA机器人减速器齿轮磨损故障的原因 1. 润滑不足&#xff1a;润滑油不足或质量不佳可能导致齿轮磨损。 2. 负载过重&#xff1a;超过库卡机械臂减速器额定负载可能导致齿轮磨损。 3. 操作不当&#xff1a;未按照说明书操作可能导致KUKA机器人减速器齿轮磨损。 4. 维护不足…