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.mzph.cn/news/89401.shtml

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

相关文章

vue点击按钮收缩菜单

问题描述 VUE菜单有一个BUG,当我们点击其它按钮或者首页的时候,已经展示的一级菜单是不会自动收缩的。这个问题也导致很多开发者把一级菜单都换成了二级菜单。 错误展示 错误的效果请看下图。 解决方法 1、寻找菜单文件 因为我使用的是ruoyi的前端框…

Spring Controller内存马

获取当前上下文运行环境 getCurrentWebApplicationContext WebApplicationContext context ContextLoader.getCurrentWebApplicationContext(); 在SpringMVC环境下获取到的是一个XmlWebApplicationContext类型的Root WebApplicationContext: 在Spring MVC环境中…

可信执行环境(Tee)入门综述

SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根(RTM&#xf…

8月最新修正版风车IM即时聊天通讯源码+搭建教程

8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …

【Java 进阶篇】数据定义语言(DDL)详解

数据定义语言(DDL)是SQL(结构化查询语言)的一部分,它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象,如表、索引、视图等。在本文中&#x…

100万级连接,石墨文档WebSocket网关如何架构?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近,尼恩指导一个小伙伴简历,写了一个《高并发网关项目》,此项目帮这个小伙拿到 字节/阿里/…

【量化】量化原理浅析

前言 模型在端侧运行时,会追求模型保持原有精度的同时,让模型的运行速度更快。基本方向为模型压缩和加速,着力于减少网络参数量、降低计算复杂度。可通过以下方式实现: 针对网络结构本身进行改进,常用的3x3的卷积的叠加…

Docker-如何获取docker官网x86、ARM、AMD等不同架构下的镜像资源

文章目录 一、概要二、资源准备三、环境准备1、环境安装2、服务器设置代理3、注册docker账号4、配置docker源 四、查找资源1、服务器设置代理2、配置拉取账号3、查找对应的镜像4、查找不同版本镜像拉取 小结 一、概要 开发过程中经常会使用到一些开源的资源,比如经…

基于体系结构-架构真题2022(四十一)

给定关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么函数依赖的公理系统中分解规则是指()为F所蕴含。 解析: 伪传递是x到y,wy到z,则xw到z 传递是z…

CISSP学习笔记:通过原则和策略的安全治理

#第一章 通过原则和策略的安全治理 1.1 理解和应用机密性、完整性和可用性的 安全的主要目标,CIA三元组 机密性、完整性和可用性,每条原则的重要性主要取决于组织的安全目标以及安全性所受到的威胁程度 1.1.1 机密性 机密性:限制未授权主…

【C/C++笔试练习】——printf在使用%的注意事项、for循环语句的三个条件、运算符优先级、删除公共字符

文章目录 C/C笔试练习1.%符号在printf用作格式说明符的注意事项(1)输出%5.3s(2)判断%中小数点含义 2.for循环语句的三个条件(3)判断循环次数(4)判断循环次数 3.运算符优先级&#xf…

计算机专业毕业设计项目推荐08-英语在线点读平台(SpringBoot+Vue+MongoDB)

英语在线点读平台(SpringBootVueMongoDB) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设…

【Linux】【网络】传输层协议:UDP

文章目录 UDP 协议1. 面向数据报2. UDP 协议端格式3. UDP 的封装和解包4. UDP 的缓冲区 UDP 协议 UDP传输的过程类似于寄信。 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。不可靠:没有确认机制,没有重传机制&am…

钉钉h5微应用调试 整理

钉钉 H5微应用整理 1.申请H5微应用2.登录3.调试 1.申请H5微应用 https://open.dingtalk.com/ 登录钉钉开发平台。 应用appId、CorpId都可以在网站上自行查找 应用首页地址(指手机端显示地址) pc端首页地址(指电脑端显示地址) 我这…

工业交换机常见的故障有哪些?

通常情况下,工业交换机出现故障可以分为两类:软件性能故障和硬件物理故障。软性能故障通常指工业交换机在研发设计阶段出现的问题。 物理层故障主要指交换机本身的硬件故障以及连接交换机的物理线路故障。安防专用工业交换机的交换是根据通信双方传输信…

基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

消费增值模式:电商行业新趋势

互联网时代的发展日新月异,不断激发出新的商业模式。其中,消费增值模式以其独特的优势,越来越受到电商行业的青睐。传统电商模式难以满足消费者个性化消费的需求,而消费增值模式不仅满足了消费者对购物体验的需求,还为…

NSS [HXPCTF 2021]includer‘s revenge

NSS [HXPCTF 2021]includer’s revenge 题目描述&#xff1a;Just sitting here and waiting for PHP 8.1 (lolphp). 题目源码&#xff1a;&#xff08;index.php&#xff09; <?php ($_GET[action] ?? read ) read ? readfile($_GET[file] ?? index.php) : inclu…

WordPress主题开发( 八)之—— 模板循环详细用法

WordPress 主题开发教程手册 — 模板循环 WordPress 主题开发中&#xff0c;模板循环是一个非常关键的概念&#xff0c;它负责默认机制来输出文章内容。模板循环会遍历当前页面获取的所有文章&#xff0c;然后使用主题中的模板标签将它们格式化并输出。 模板循环的应用 Word…

Intel 700 800系网卡升级支持WOL UEFI PXE方法

Intel 700 800系网卡默认的NVM版本是不支持UEFI的&#xff0c;升级NVM也不能解决&#xff0c;需要将UEFI driver 包到NVM里。操作步骤如下&#xff1a; 1. 下载Preboot软件包&#xff0c;有Windows和Linux版本&#xff0c;本次使用Linux版本做示例。 Intel Ethernet Connecti…