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

文章目录

  • 一、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.mzph.cn/news/857990.shtml

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

相关文章

改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积

YOLO系列改进 | ICLR2022 | 全维动态卷积:中文综述 简介 YOLO(You Only Look Once)是一种目标检测算法,以其速度和精度著称。 本文将介绍YOLO系列的改进,包括ICLR2022上提出的全维动态卷积(Omni-Dimensio…

2024年特种设备(起重机指挥)考试题库

31.《中华人民共和国特种设备安全法》规定,特种设备安全管理人员、检测人员和作业人员应当按照国家有关规定取得( ),方可从事相关工作。 A.合格成绩 B.相应资格 C.行业认可 答案:B 32.《中华人民共和国特种设备安全法》规定&…

数据库管理-第211期 记一次简单的SQL性能优化(20240623)

数据库管理211期 2024-06-23 数据库管理-第211期 记一次简单的SQL性能优化(20240623)1 起因2 变化3 排查问题4 优化方案1方案2方案3 5 效果总结 数据库管理-第211期 记一次简单的SQL性能优化(20240623) 作者:胖头鱼的鱼…

Android 你应该知道的学习资源 进阶之路贵在坚持

coderzheaven 覆盖各种教程,关于Android基本时案例驱动的方式。 非常推荐 thenewcircle 貌似是个培训机构,多数是收费的,不过仍然有一些free resources值得你去挖掘。 coreservlets 虽然主打不是android,但是android的教程也​ 是…

Python基础面试题解答

Python基础面试题解答 基础语法 1. Python中的变量是如何管理内存的? Python中的变量通过引用计数来管理内存。当一个变量被创建时,会分配一个内存地址,并记录引用次数。当引用次数变为0时,垃圾回收机制会自动释放该内存。 2.…

Git config命令详解

使用场景 语法 git config [<file-option>] [--type<type>] [--comment<message>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] <name> [<value> [<value-pattern>]] git config [<file-option>] [--type<typ…

Linux配置中文环境

文章目录 前言中文语言包中文输入法中文字体 前言 在Linux系统中修改为中文环境&#xff0c;通常涉及以下几个步骤&#xff1a; 中文语言包 更新源列表&#xff1a; 更新系统的软件源列表和语言环境设置&#xff0c;确保可以安装所需的语言包。 sudo apt update sudo apt ins…

华为某员工爆料:三年前985本科起薪30万,现在硕士起薪还是30w,感慨互联网行情变化

“曾经的30万年薪&#xff0c;是985本科学历的‘标配’&#xff0c;如今硕士也只值这个价&#xff1f;” 一位华为员工的爆料&#xff0c;揭开了互联网行业薪资变化的冰山一角&#xff0c;也引发了不少人的焦虑&#xff1a;互联网人才“通货膨胀”的时代&#xff0c;真的结束了…

Java基础的重点知识-04-封装

文章目录 面向对象思想封装 面向对象思想 在计算机程序设计过程中&#xff0c;参照现实中事物&#xff0c;将事物的属性特征、行为特征抽象出来&#xff0c;描述成计算机事件的设计思想。 面向对象思想的三大基本特征: 封装、继承、多态 1.类和对象 类是对象的抽象&#xff…

Python17 多进程multiprocessing

1.多进程与多线程的区别 在Python中&#xff0c;多线程&#xff08;multithreading&#xff09;和多进程&#xff08;multiprocessing&#xff09;是两种并行执行任务的方式&#xff0c;它们有一些关键的区别&#xff1a; 进程和线程的基本区别&#xff1a; 进程&#xff1a;进…

Vision Pro的3D跟踪能力:B端应用的工作流、使用教程和经验总结

Vision Pro的最新3D跟踪能力为工业、文博、营销等多个B端领域带来了革命性的交互体验。本文将详细介绍这一功能的工作流、使用教程,并结合实际经验进行总结。 第一部分:工作流详解 一、对象扫描 使用Reality Composer iPhone应用程序对目标对象进行3D扫描,如吉他或雕塑,…

Web Workers

Web Workers Web Workers 是一种HTML5技术&#xff0c;它允许网页在后台线程中运行脚本&#xff0c;从而实现了浏览器的并发处理能力&#xff0c;使得计算密集型任务可以在用户界面保持响应的同时执行&#xff0c;不会阻塞主线程。这有助于提高网页性能&#xff0c;特别是对于…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个…

全世界都在劝退学Android的程序员

上面这些原因导致一度出现三百六十行&#xff0c;行行转IT的盛况。 城里的人想出来 我记得我在逛某乎的时候&#xff0c;有几个问题经常上热榜&#xff1a; “Android开发凉了吗&#xff1f;” “程序员的出路在哪里&#xff1f;” “感觉中国的程序员前途一片灰暗&#xff0…

[信号与系统]IIR滤波器与FIR滤波器的表达、性质以及一些分析

前言 阅读本文需要阅读一些前置知识 [信号与系统]傅里叶变换、卷积定理、和为什么时域的卷积等于频域相乘。 [信号与系统]有关滤波器的一些知识背景 [信号与系统]关于LTI系统的转换方程、拉普拉斯变换和z变换 [信号与系统]关于双线性变换 IIR滤波器的数学表达式 IIR&…

Pip换源详解

Pip换源是指将pip&#xff08;Python的包管理工具&#xff09;的默认源更改为其他源。以下是关于Pip换源的详细说明&#xff1a; 一、Pip换源的原因 访问被阻止的源&#xff1a;在某些地区或网络环境下&#xff0c;直接访问官方的Python Package Index (PyPI) 可能受到限制或…

电子SOP实施(MQTT协议)

架构图 服务与程序 用docker启动mqtt broker(服务器) 访问&#xff1a;http://192.168.88.173:18083/#/dashboard/overview 用户名&#xff1a;admin 密码&#xff1a;*** 消息发布者(查找sop的url地址&#xff0c;发布出去) 修改url&#xff0c;重新发布消息 import ran…

Claude 3.5 Sonnet已经上线,Claude 3.5 Opus即将上线

https://docs.anthropic.com/en/docs/about-claude/models 人工智能学习网站 https://chat.xutongbao.top/

Python基础——字符串常见用法:切片、去空格、替换、拼接

文章目录 专栏导读1、拼接字符串2、获取字符串长度3、字符串切片4、字符串替换&#xff1a;5、字符串分割6、字符串查找7、字符串大小写转换8、字符串去除空白9、字符串格式化&#xff1a;10、字符串编码与解码&#xff1a;11、字符串判断12、字符串填充与对齐总结 专栏导读 &a…

高性能并行计算华为云实验四:快排算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建快排算法源码 3.2 makefile的创建与编译 3.3 主机文件配置与运行监测 四、实验结果与分析 4.1 结果一及分析 4.2 结果二及分析 五、实验思考与总结 5.1 实验思考 5.2 实验总结 END&#xff5e; 一、实验目的…