Redis 集合操作实战(全)

目录

SADD 插入集合

SCARD 取元素数量

SPOP 随机移除元素

SREM 移除多个元素

SMOVE 移动元素到别的集合

SMEMBERS 取所有成员

SRANDMEMBER 取指定数量元素

SISMEMBER 判断元素是否存在

SUNION 多集合求并集

SUNIONSTORE 多集合求并集(存储)

SINTER 多集合求交集

SINTERSTORE 多集合求取交集(存储)

SDIFF 多集合求取差集

SDIFFSTORE 多集合求取差集(存储)

SSCAN 迭代


SADD 插入集合

SADD key member [member ...]:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略

  • 假如 key 不存在,则创建一个只包含 member 元素作成员的集合
  • 当 key 不是集合类型时,返回一个错误
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e f g h i j k l m n # 向key中添加集合元素,key不存在则自动创建空的key集合
(integer) 14
127.0.0.1:6379> set name lisi # 初始化非集合key
OK
127.0.0.1:6379> sadd name zhangsan # 向非集合中执行sadd
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 是被添加的元素的数量。

返回值:

  • 被添加到集合中的新元素的数量,不包括被忽略的元素。
  • 对非集合执行sadd,报错。

SCARD 取元素数量

SCARD key:返回集合中的元素数量

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> scard myset2    # 不存在key
(integer) 0
127.0.0.1:6379> sadd myset a b c d e f g h i j k l m n
(integer) 14
127.0.0.1:6379> scard myset     # 存在集合key
(integer) 14
127.0.0.1:6379> set name lisi   # 初始化非集合key
OK
127.0.0.1:6379> scard name      # 对非集合key执行scard命令
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • 不存在key似为空集合,返回0
  • 存在集合key,返回元素个数
  • 对非集合key,报错


SPOP 随机移除元素

SPOP key:移除并返回集合中的一个随机元素。

  • 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a   # 初始化集合
(integer) 1
127.0.0.1:6379> spop myset
"a"
127.0.0.1:6379> spop myset     # 集合为空
(nil)
127.0.0.1:6379> spop myset2    # 不存在的key
(nil)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> spop name      # key 不为集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • 被随机移除的元素。
  • 当 key 不存在或 key 是空集时,返回 nil
  • 当 key 不为集合,报错。

SREM 移除多个元素

SREM key member [member ...]:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e    # 初始化集合
(integer) 5
127.0.0.1:6379> srem myset a b c d      # 移除 a b c d
(integer) 4
127.0.0.1:6379> srem myset a b c d e    
(integer) 1                             # 移除 a b c d e,不存在元素忽视了
127.0.0.1:6379> srem myset2 a           
(integer) 0                             # 移除不存在key似为空集合
127.0.0.1:6379> set name list
OK
127.0.0.1:6379> srem name 1             # key不为集合,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度为O(N), N 为给定 member 元素的数量

返回值:

  • 不存在key似为空集合,返回0。
  • key为集合,返回成功移除的元素的数量(不包括被忽视的元素),不存在的元素直接被忽视。
  • key不为集合,报错。

SMOVE 移动元素到别的集合

SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。

  • 该操作是原子性的。
  • 如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
  • 当 destination 集合已经包含 member 元素时,SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
  • 当 source 或 destination 不是集合类型时,返回一个错误。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b    # 初始化集合
(integer) 2
127.0.0.1:6379> smove s1 dest a    # 移动集合
(integer) 1
127.0.0.1:6379> smembers s1        # 查看集合元素
1) "b"
127.0.0.1:6379> smembers dest      # 查看dest元素
1) "a"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> smove s1 name b    # 有非集合key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • 如果 member 元素被成功移除,返回 1 。
  • 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。

SMEMBERS 取所有成员

SMEMBERS key:返回集合 key 中的所有成员。

  • 不存在的 key 被视为空集合。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c d e
(integer) 5
127.0.0.1:6379> smembers s1
1) "d"
2) "b"
3) "a"
4) "c"
5) "e"
127.0.0.1:6379> smembers s2
(empty array)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> smembers name
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 为集合的基数。

返回值:

  • 集合中的所有成员。
  • 不存在的key返回空。
  • 非集合key,报错。

SRANDMEMBER 取指定数量元素

SRANDMEMBER key [count]:取指定数量count的元素。

  • count不指定:默认为1,即随机取一个元素。
  • count为正数:count小于集合大小,返回不重复的count个元素的数组;count大于等于集合大小,则返回整个集合的元素。
  • count为负数:那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> srandmember s1
"a"
127.0.0.1:6379> srandmember s1 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember s1 5
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> srandmember s1 -5
1) "a"
2) "c"
3) "a"
4) "c"
5) "c"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> srandmember lisi
(nil)

时间复杂度:

  • 只提供 key 参数时为 O(1) 。
  • 如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。

返回值:

  • 只提供 key 参数时,返回一个元素;如果集合为空,返回 nil 
  • 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。
  • 对非集合key执行srandmember返回nil。

SISMEMBER 判断元素是否存在

SISMEMBER key member:判断 member 元素是否集合 key 的成员。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c    # 初始化集合
(integer) 3
127.0.0.1:6379> sismember s1 a   # 查看是否存在
(integer) 1
127.0.0.1:6379> sismember s1 f
(integer) 0
127.0.0.1:6379> sismember s2 f   # 不存在key似为空集合
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sismember name f # 对非集合key操作,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(1)。

返回值:

  • 存在返回1
  • 不存在返回0
  • 对非集合执行 SISMEMBER 命令,报错。

SUNION 多集合求并集

SUNION key [key ...]:返回一个集合的全部成员,该集合是所有给定集合的并集。

  • 不存在的 key 被视为空集。
  • 原理:把所有key集合的元素组合在一起并且去重后的元素集合。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b    # 初始化集合
(integer) 2
127.0.0.1:6379> sadd myset2 a b c d    # 初始化集合
(integer) 4
127.0.0.1:6379> sunion myset myset2 myset3 # myset3不存在被似为空集合
1) "d"
2) "a"
3) "b"
4) "c"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> sunion myset name        # 有key存在且不为集合,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 是所有给定集合的成员数量之和。

返回值:

  • 并集成员的列表。
  • 有key存在且不为集合则报错。

SUNIONSTORE 多集合求并集(存储)

SUNIONSTORE destination key [key ...]:与SUNION操作相似。

  • 不同点:它将结果保存到 destination 集合,而不是简单地返回结果集。
  • 如果 destination 已经存在,则将其覆盖。
  • destination 可以是 key 本身。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b    # 初始化集合
(integer) 2
127.0.0.1:6379> sadd s2 c
(integer) 1
127.0.0.1:6379> sunionstore dest s1 s2 s3 # 取并集
(integer) 3
127.0.0.1:6379> smembers dest             # 查看dest信息
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sunionstore dest s1 s2 s3 name    # 有非命令key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 是所有给定集合的成员数量之和。

返回值:

  • 结果集中的元素数量。
  • 对非集合key执行SUNIONSTORE命令报错。

SINTER 多集合求交集

SINTER key [key ...]:返回所有给定集合的交集。

  • 不存在的 key 被视为空集。
  • 原理:取都存在于所有key集合中的元素集合。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c d e    # 初始化集合
(integer) 5
127.0.0.1:6379> sadd s2 b e f g      # 初始化集合
(integer) 4
127.0.0.1:6379> sinter s1 s2         # 取交集
1) "e"
2) "b"
127.0.0.1:6379> sinter s1 s2 s3      # 取交集,有不存在的key似为空集
(empty array)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> sinter s1 s2 name    # 存在不为集合的key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。

返回值:

  • 交集成员的列表(不存在key似为空集合)。
  • 存在key不为集合,报错。

SINTERSTORE 多集合求取交集(存储)

SINTERSTORE destination key [key ...]:跟SINTER操作相似。

  • 不同点:SINTERSTORE 它将结果保存到 destination 集合中。
  • 如果 destination 已经存在,则将其覆盖。
  • destination 可以是 key 本身。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b d    # 初始化集合
(integer) 3
127.0.0.1:6379> sadd s2 d e f    # 初始化集合
(integer) 3
127.0.0.1:6379> sinterstore dest s1 s2
(integer) 1
127.0.0.1:6379> smembers dest    # 查看集合dest
1) "d"
127.0.0.1:6379> set name lisi 
OK
127.0.0.1:6379> sinterstore dest s1 s2 name # 存在不为集合的key
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。

返回值:

  • 结果集中的成员数量。
  • 存在key不为集合,报错。

SDIFF 多集合求取差集

SDIFF key [key ...]:取给定集合之间的差集

  • 不存在的key似为空集合
  • 原理:以第个key集合为主减去存在于后面所有key集合的并集的元素,剩下的元素集合。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e # 初始化几个集合key
(integer) 5
127.0.0.1:6379> sadd myset2 d e
(integer) 2
127.0.0.1:6379> sadd myset3 c d
(integer) 2
127.0.0.1:6379> sdiff myset myset2 myset3 # 取三个集合的差集
1) "b"
2) "a"
127.0.0.1:6379> sdiff myset myset2 myset3 myset4 # 取4个集合的差集,其中一个不存在似为空集合
1) "b"
2) "a"
127.0.0.1:6379> set name lisi # 定义一个非集合key
OK
127.0.0.1:6379> sdiff myset myset2 myset3 myset4 name # 有一个key不为集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 是所有给定集合的成员数量之和。

返回值:

  • 交集成员的列表
  • 若有不存在的key,似为空集合
  • 若有非集合key,报错


SDIFFSTORE 多集合求取差集(存储)

SDIFFSTORE destination key [key ...]:与SDIFF操作相拟。

  • 不同点:SDIFFSTORE 它将结果保存到 destination 集合中。
  • 如果 destination 已经存在,则将其覆盖。
  • destination 可以是 key 本身。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 'baidu' 'google' 'alibaba' 'banana' # 初始化集合
(integer) 4
127.0.0.1:6379> sadd s2 'apple' 'banana' 'orange'           # 初始化集合
(integer) 3
127.0.0.1:6379> sdiffstore dest s1 s2                       # 求差集并保存到dest中
(integer) 3
127.0.0.1:6379> smembers dest                               # 查看dest中元素
1) "baidu"
2) "google"
3) "alibaba"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sdiffstore dest s1 name                     # 存在不为集合的key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value

时间复杂度O(N), N 是所有给定集合的成员数量之和。

返回值:

  • 结果集中的成员数量。
  • 存在key不为集合,报错。


SSCAN 迭代

  • 详见SCAN命令操作实战。

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

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

相关文章

探索科技前沿,科东带你深度解读2023上海工博会

科东软件诚邀您亲临现场 感受软件定义控制新趋势 这是一场集结全球创新力量与科技创新成果的璀璨盛宴,也是推动未来科技与产业发展的新型工业盛会,更是一次助力构建数字化、低碳化发展格局的重量级活动。 2023年9月19日,备受瞩目的第23届中国…

133.【MySQL_运维篇】

MySQL_运维 (一)、日志 ⭐1.日志_错误日志 (ERROR-LOG)(1).错误日志_介绍(2).错误日志_示列 2.日志_二进制日志 (BINARY-LOG)(1).二进制日志_介绍(2).二进制日志_作用(3).二进制日志_格式(4).二进制日志_查看 (CMD)(5).二进制日志_删除 3.日志_查询日志 (GENERAL-LOG)(1).开启_…

基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................... for Num_xb Num_xb2Num_…

现在的国内MBA教育是否同质化太严重?

如今在国内的MBA教育领域可以说是一片欣欣向荣,两百余所高校开设MBA项目招生,而报考市场也随着时代的发展持续升温,但是在这背后也存在一些问题伴随发生,其中就是MBA项目的同质化与跟风化趋势越来越明显,主要有以下几个…

Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 矢量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库…

MySQL ——多表连接查询

一、(左、右和全)连接概念 内连接: 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分,两张表是平等的。 关键字:inner join on 语句&#xf…

Android ConstraintLayout app:layout_constraintHorizontal_weight

Android ConstraintLayout app:layout_constraintHorizontal_weight <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:…

软件设计模式系列之十一——装饰模式

当谈到设计软件系统时&#xff0c;经常需要考虑如何使系统更加灵活、可扩展和易维护。设计模式是一种被广泛采用的方法&#xff0c;用于解决常见的设计问题&#xff0c;并提供了一套可重用的解决方案。装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&…

crypto:RSA

题目 利用代码跑一下解码 import gmpy2 e 17 p 473398607161 q 4511491 d gmpy2.invert(e,(p-1)*(q-1)) print(d)总结 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种非对称加密算法&#xff0c;常用于数据加密和数字签名。它基于两个大素数的乘积难以分解的数…

python实现命令tree的效果

把所有的文档都传到了git上,但是内容过多找起来不方便,突发奇想如果能在readme中,递归列出所有文件同时添加上对应的地址,这样只需要搜索到对应的文件点击就能跳转过去了… 列出文件总得有个显示格式,所以就按照tree的来了… 用python实现命令tree的效果 首先,这是tree的效果…

ATA-8000系列射频功率放大器——应用场景介绍

ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&#xff0c;实现射频信号的放大。 图&#xff1a;ATA-8000系…

算法 杨辉三角求解 java打印杨辉三角 多路递归打印杨辉三角 递归优化杨辉三角 记忆法优化递归 帕斯卡三角形 算法(十二)

1. 杨辉三角&#xff1a; 是二项式系数在三角形中的一种几何排列&#xff0c;中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲&#xff0c;帕斯卡&#xff08;1623----1662&#xff09;在1654年发现这一规律&#xff0c;所以这个表又叫做帕斯卡三角形。帕斯…

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…

Cannot find module ‘core-js/modules/es6.regexp.constructor‘

npm run dev 之后报如下错误 解决方法&#xff1a;npm install core-js2 如果超时或者下载时间慢可以尝试 用cnpm install core-js2

记一次hyperf框架封装swoole自定义进程

背景 公司准备引入swoole和rabbitmq来处理公司业务。因此&#xff0c;我引入hyperf框架&#xff0c;想用swoole的多进程来实现。 自定义启动服务封装 <?php /*** 进程启动服务【manager】*/ declare(strict_types1);namespace App\Command;use Swoole; use Swoole\Proce…

Android 编译插桩操纵字节码

本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果&#xff0c;通过插桩实现在每一个 Activity 打开时输出相应的 log 日志。实现思路 过程主要包含两步&#xff1a; 1、遍历项目中所有的 .class 文件​ 如何找到项目中编译生成的所有 .class 文件&#…

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录 1 恢复默认布局1 .1直接点击file→Manage IDE Settings→Restore Default Settings&#xff08;如下图所示&#xff09;&#xff1a;1.2 直接点击Restore and Restart&#xff0c; 然后Pycharm就会自动重启&#xff0c;重启之后的界面就是最原始的界面了 2 改变主题2.…

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测&#…

接口测试——接口协议抓包分析与mock_L2

目录&#xff1a; 抓包工具charles抓包工具fiddler抓包工具证书配置app抓包实战练习接口测试实战练习 1.抓包工具charles 工具介绍 支持 SSL 代理支持流量控制支持重发网络请求&#xff0c;方便后端调试支持修改网络请求参数支持网络请求的截获并动态修改可以自动将 json 或…

探索Moonbeam路由流动性的强大功能

Moonbeam的GMP预编译作为MRL的接口&#xff0c;有助于将带有Token的消息从GMP协议&#xff08;通过XCMP&#xff09;传输到与Moonbeam链接的平行链。 为何是个重磅消息&#xff1f;因为这项技术使得将流动性从外部区块链转移到其他波卡平行链成为可能&#xff01; 这里补充一…