Redis | Redis 集合相关命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis | Redis 集合相关命令

       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 的各种应用场景,希望大家可以喜欢。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
19天前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
33 5
|
1月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
38 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
5天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
11 0
|
30天前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
24 3
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
25 2
|
1月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
42 3
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
171 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
22天前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
23 0
|
2月前
|
存储 NoSQL Redis
6)深度解密 Redis 的集合(Set)
6)深度解密 Redis 的集合(Set)
51 1
下一篇
无影云桌面