Redis 集合相关命令

news2024/9/22 1:13:57

Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 集合 相关的命令,也就是关于 Sets 相关的命令,如下图。

上图中用红色圈中的部分,就是关于 集合 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。

127.0.0.1:6379> help @set

复制

在按下回车后,可以看到相应分类命令的说明,如下图。

图中就是部分关于 Sets 相关的部分命令。

常用 Sets 相关命令

Sets 数据类型是 Key 对应的 Value 的类型,在 Redis 中所有的 Key 都是字符串,所谓的数据类型表示的是 Value 的类型。在 Sets 中的 Value 是一个集合,集合是无序的,不可以重复的。

为了大家能够直接复制命令进行测试,下面我就不截图了。

1、sadd

添加一个或者多个元素到集合里,命令格式如下:

sadd key member [member ...]

复制

例子如下:

127.0.0.1:6379> sadd lang java c++
(integer) 2

复制

sadd 命令中 lang 是 key,而 java 和 c++ 是两个元素,或者也可以称为两个值,两个成员。

Sets 和 List 类似,它的 key 对应多个 value,不像 String 类型,一个 key 对应一个 value。

Sets 集合是不可以重复的,因此添加相同的元素会失败,测试如下:

127.0.0.1:6379> sadd lang java
(integer) 0

复制

2、scard

获取集合中的元素个数

127.0.0.1:6379> scard lang
(integer) 2

复制

3、sismember

判断一个值是否在指定的集合中

127.0.0.1:6379> sismember lang java
(integer) 1
127.0.0.1:6379> sismember lang python
(integer) 0

复制

4、smembers

获取指定集合中的所有元素

127.0.0.1:6379> smembers lang
1) "java"
2) "c++"

复制

5、smove

移动集合中的一个元素到另外一个集合中

127.0.0.1:6379> smove lang otherlang c++
(integer) 1
127.0.0.1:6379> smembers otherlang
1) "c++"

复制

注意:

一次只能移动一个元素

127.0.0.1:6379> smove lang otherlang c++ java
(error) ERR wrong number of arguments for 'smove' command

复制

如果要移动元素不存在,也是移动不到另外一个集合当中的

127.0.0.1:6379> smove lang otherlang python
(integer) 0

复制

6、spop

返回指定集合中的一个元素,并删除,它的指令格式如下:

spop key [count]

复制

在测试前再添加几个元素

127.0.0.1:6379> sadd lang python php ruby lua scala
(integer) 5

复制

查看集合中的元素

127.0.0.1:6379> smembers lang
1) "c++"
2) "java"
3) "php"
4) "ruby"
5) "scala"
6) "python"
7) "lua"

复制

获取一个值:

127.0.0.1:6379> spop lang 1
1) "scala"

复制

可以看到返回的是第五个值,获取的这个值已经从集合中删除,查看集合中的元素

127.0.0.1:6379> smembers lang
1) "java"
2) "php"
3) "ruby"
4) "c++"
5) "python"
6) "lua"

复制

获取两个值

127.0.0.1:6379> spop lang 2
1) "c++"
2) "python"

复制

可以看到返回了两个值,且返回的这两个值已经从集合中删除了,查看集合中的元素

127.0.0.1:6379> smembers lang
1) "java"
2) "php"
3) "ruby"
4) "lua"

复制

可以看到,获取的值是随机的

目前集合中还有四个值,我们这次使用 spop 来获取五个元素,

127.0.0.1:6379> spop lang 5
1) "ruby"
2) "php"
3) "java"
4) "lua"
127.0.0.1:6379> smembers lang
(empty list or set)

复制

从上面可以看出,虽然我们打算获取 5 个元素,但是实际只有 4 个,再获取完最后四个元素后,lang 集合中已经没有值了。

7、srandmember

从集合中随机返回若干元素,它的指令格式和 spop 类似,它只返回元素而不从集合中删除

srandmember key [count]

复制

在测试之前,先添加若干个元素

127.0.0.1:6379> sadd lang java c++ php python lua ruby asm
(integer) 7
127.0.0.1:6379> smembers lang
1) "c++"
2) "ruby"
3) "java"
4) "php"
5) "asm"
6) "python"
7) "lua"

复制

测试 srandmember 命令

127.0.0.1:6379> srandmember lang 1
1) "lua"
127.0.0.1:6379> srandmember lang 2
1) "lua"
2) "c++"
127.0.0.1:6379> srandmember lang 5
1) "ruby"
2) "php"
3) "c++"
4) "python"
5) "lua"
127.0.0.1:6379> srandmember lang 1
1) "java"

复制

可以看到,每次返回的元素是不同的

8、srem

从集合中删除一个或多个元素,它的格式如下:

srem key member [member ...]

复制

127.0.0.1:6379> srandmember lang 1
1) "java"
127.0.0.1:6379> srem lang java
(integer) 1
127.0.0.1:6379> srem lang c++ python
(integer) 2
127.0.0.1:6379> smembers lang
1) "ruby"
2) "php"
3) "asm"
4) "lua"

复制

9、sinter

获得两个集合的交集,这里的交集就是数学上的交集,也就是两个集合拥有的相同的元素,指令格式如下:

sinter key [key ...]

复制

首先,我们重新来定义两个集合。

127.0.0.1:6379> sadd zhangsan java c++ python ruby
(integer) 4
127.0.0.1:6379> sadd lisi python c java php
(integer) 4

复制

这里有两个集合,分别是 zhangsan 和 lisi,现在来看 zhangsan 和 lisi 有的共同的元素。

127.0.0.1:6379> sinter zhangsan lisi
1) "java"
2) "python"

复制

sinter 可以得到多个集合的交集

10、sunion

获得两个集合的并集,这里的并集就是数学上的并集,也就是两个集合的所有元素,指令格式如下:

sunion key [key ...]

复制

接着用 sunion 的例子来看两个集合的并集,

127.0.0.1:6379> sunion zhangsan lisi
1) "c"
2) "ruby"
3) "java"
4) "php"
5) "c++"
6) "python"

复制

sunion 可以得到多个集合的并集

11、sdiff

获取两个集合的差集,这里的差集是数学上的差集,指令格式如下:

sdiff key [key ...]

复制

差集和交集、并集不太相同,看例子:

127.0.0.1:6379> sdiff zhangsan lisi
1) "ruby"
2) "c++"

复制

zhangsan 和 lisi 的差集,也就是 zhangsan 中有的,而 lisi 中没有的,这就是 zhangsan 和 lisi 的差集。

再来看下面的例子:

127.0.0.1:6379> sdiff lisi zhangsan
1) "c"
2) "php"

复制

这个例子当中,sdiff 后面跟着 lisi 这个集合,因此是 lisi 和 zhangsan 的差集,也就是 lisi 中有的,而 zhangsan 中没有的。

sdiff 可以得到多个集合的差集

12、sinterstore

获取两个集合的交集,并将结果保存到一个 key 中

这个命令和 sinter 命令类似,只是它会把交集的结果保存到一个 key 中进行存储,其指令格式如下:

sinterstore destination key [key ...]

复制

127.0.0.1:6379> sinterstore result zhangsan lisi
(integer) 2
127.0.0.1:6379> smembers result
1) "java"
2) "python"

复制

13、sunionstore

获取两个集合的并集,并将结果保存到一个 key 中

14、sdiffstore

获取两个集合的差集,并将结果保存到一个 key 中

总结

Redis 的集合类型提供的命令还是比较多的,它不但可以当作一个集合来用,它的 交集、并集 和 差集 还可以实现一些较为有意思的功能。

Redis 常用的几种基本数据类型总结完成后,我会再逐步的梳理 Redis 的各种应用场景,希望大家可以喜欢。

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

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

相关文章

JDBC小记——基础入门

目录 JDBC概念 JDBC入门 1. 导入数据库的驱动jar包 2. 加载驱动jar包 3. 获取连接对象 4. 获取操作对象 5.执行SQL语句 6.释放资源 IDEA连接数据库 结果集对象 登录练习 JDBC概念 Java DataBase Connectivity 即 Java数据库连接 JDBC,其实就是Java定义…

第7章 Scala集合

第7章 Scala集合 7.1 简介 ​ ​ scala.collection.immutable ​ scala.collection.mutable ​ 7.2 数组 ​ 不可变数组 package chapter07object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](10…

【AUTOSAR】AUTOSAR开发工具链(二)----TASKING库的封装

1、集成工程 步骤: 拷贝模块代码: 将源工程的所有模块代码拷贝到库工程,将源工程拷贝一份,并删除不必要的文件作为释放工程,完成结果如下图: 源工程(左)VS库工程(中&am…

[CUDA][Ubuntu]如何卸载cuda和cudnn和nvidia driver

百度有很多牛鬼蛇神的办法,试了一晚上,都不行。 包括:通过安装方式卸载,我tm根本不知道当初这个机器是怎么安装的cuda,我怎么卸载??? 通过删除文件夹和自带uninstall程序&#xff…

安卓蓝牙协议数据包格式

本文解析蓝牙传输的数据包格式,目的是对蓝牙的各个层次的协议有更深的理解。 bit数据流格式 在讲数据报文之前,必须了解协议中对数据的BIT排序的规定,在协议中规定数据包或者PDU都是以Little Endian format(小端模式)存放,也就是…

数据库信息速递 - 将可观测性带到现代数据堆栈 (译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Layui基础入门

一、引言 1.1 介绍 官网&#xff1a;<https://www.layui.com/ > 这个不维护了 看下面这个 https://www.layuiweb.com/ 在官网首页&#xff0c;可以很方便的下载LayUI LayUI 是一款经典模块化前端 UI 框架&#xff0c;我们只需要定义简单的HTML、CSS、JS即可实现很复杂的前…

小鲜肉语录

马上端午放假了&#xff0c;今天不聊技术&#xff0c;聊点轻松的。 一、 和老公、小鲜肉周末出去玩&#xff0c;路上闲聊。老公提到小鲜肉在他们班成绩大概是第四名。 我说&#xff1a;我小学五年级的时候我们我们班60个人我排第四。你们班不到30个人。这么算你成绩不如我小时候…

Qt编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)

一、前言 跨平台的推流工具当属OBS最牛逼&#xff0c;功能也是最强大的&#xff0c;唯一的遗憾就是多路推流需要用到插件&#xff0c;而且CPU占用比较高&#xff0c;默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流&#xff0c;意味着肯定占用不少CPU资…

【解决】笔记本电脑wifi无法访问网站的各种情况

本文适用于 mac 以及 windows 等操作系统 场景 手机可以连接wifi&#xff0c;电脑连接却无法访问左下角wifi图标为小地球可以使用app&#xff0c;无法访问网站其他 方式一 Win10任务栏中的网络变成小地球&#xff0c;无WIFI列表显示&#xff0c;应该&#xff1a; winR , 输入…

MATLAB计算程序运行所需的时间

在使用MATLAB进行计算时&#xff0c;用户有时需要了解程序运行所花费的四件&#xff0c;以此来评价程序的执行效率&#xff0c;从而对代码进行优化 可以使用3种方法来得到程序运行所需要的时间 1.使用tic和toc命令 将tic和toc命令相结合来得到程序的运行时间 ①tic命令&…

SAP CAP篇六:为CAP添加Fiori Elements程序(3)

本文目录 本系列之前的文章本篇之前的运行效果修改pom.xml添加新的Dependency更新plugin 添加新的Controller创建index目录添加UiIndexContentProviderFactory.java 添加resources运行结果更新UiIndexContentProviderFactory 代码库 (Gitcode) 本系列之前的文章 本系列之前的文…

文学创作的数学原理——5年文学阅读的思考

作者 | gongyouliu 编辑 | gongyouliu 我从2019年初开始阅读文学作品&#xff0c;到今年差不多5年了&#xff0c;至少也阅读了50本以上的世界名著了&#xff08;如果算「得到」听书上的文学作品&#xff0c;那么至少也有200本以上了&#xff09;&#xff0c;这里面绝大多数都是…

python(10):批量修改文件名

文章目录 1. 使用Python的字符串操作来去除文件名高位的多余零说明代码示例 2. 将文件夹中的文件重命名为递增的数字加上原始文件名的后缀代码运行前后&#xff1a; 1. 使用Python的字符串操作来去除文件名高位的多余零 说明 一个目录下的文件名是6位数字序号加上后缀的格式&…

PaddleSeg在Windows上的配置及人像分隔使用

PaddleSeg是基于飞桨PaddlePaddle开源的端到端图像分割套件&#xff0c;提供语义分割、交互式分割、Matting、全景分割四大分割能力。源代码地址&#xff1a;https://github.com/PaddlePaddle/PaddleSeg&#xff0c;license为Apache-2.0&#xff0c;最新发布版本为2.8。 Window…

借用jQuery发送Http请求的实现(内附源码)

文章目录 一、前言二、jQuery 介绍三、jQuery 下载四、jQuery 使用五、Http客户端DEMO实现 一、前言 最近在解决项目上前同事开发的视频播放器问题&#xff0c;视频播放器是用Qt开发&#xff0c;作为播放插件供Web调用。 播放器与Web的通信方式采用的是Http&#xff0c;数据格…

libevent(1)windows下安装libevent

Socket通信库libevent成熟、稳定、性能高&#xff0c;在unix和windows下都能使用&#xff0c;在证券交易领域也有不少成功的应用&#xff0c;已经用事实证明是非常棒的socket通信库。对我们目前交易系统的unix重构来说&#xff0c;是比较合适的选择 –– 坑少、在证券交易项目中…

Colors颜色代码对应表 | 常见颜色值的中英文对照及颜色值代码表Hex代码RGB代码

颜色代码对应表_颜色代码表大全——最全的颜色代码以及对应图片 Hex代码 RGB代码 关于颜色的英文&#xff0c;不仅仅有七个...... 一、常用颜色的英文名称&#xff1a; redcrimsonfirebrickdarkredbrownmaroonsiennasaddlebrownindianredrosybrownlightcoralsalmondarksalm…

壳牌小程序笔记

壳牌加油站 uni-app-基础-day01 概览 为什么要学uni-app&#xff1f; 现在很多中小型公司&#xff0c;都有自己的小程序项目&#xff0c;然后开发小程序就会用到uni-app。 uni-app没有诞生之前&#xff0c;怎么写小程序 使用原生微信小程序这个框架去开发&#xff1f; 只…

matplotlib---绘制折线图

1. 折线图 绘制一条线&#xff1a; plot函数来绘制折线图。下面是对各个参数的解释&#xff1a; x&#xff1a;要绘制折线图的x轴数据。y&#xff1a;要绘制折线图的y轴数据。c&#xff08;可选&#xff09;&#xff1a;指定折线的颜色。默认为蓝色&#xff08;"b"…