Redis:集合SINTER、SINTERSTORE、SUNION、SUNIONSTORE、SDIFF、SDIFFSTORE命令介绍

本文介绍了Redis中集合类型的六种常用操作命令:SINTER、SINTERSTORE、SUNION、SUNIONSTORE、SDIFF和SDIFFSTORE。这些命令分别用于求交集、并集和差集,并提供将结果存储到指定集合的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SINTER

SINTER key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。

返回所有给定集合的交集。不存在的key会被视为空集。

演示

当给定的key中有不存在或者是空集的情况时,根据集合运算定律,结果很显然也为空集。

127.0.0.1:6379> scard set
(integer) 23
127.0.0.1:6379> scard set2
(integer) 0
127.0.0.1:6379> sinter set set2
(empty list or set)

否则,返回所有给定集合的交集。

127.0.0.1:6379> smembers set
 1) "0"
 2) "1"
 3) "2"
 4) "3"
 5) "5"
 6) "6"
 7) "7"
 8) "8"
 9) "9"
10) "10"
11) "11"
12) "12"
13) "13"
14) "14"
15) "15"
16) "16"
17) "17"
18) "18"
19) "19"
20) "20"
21) "21"
22) "22"
23) "23"
127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> sinter set set2
1) "12"
2) "17"
3) "23"

当给定的key中存在不是集合的类型时,命令会返回错误。

127.0.0.1:6379> sinter set list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"

SINTERSTORE

SINTERSTORE destination key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。

这个命令类似于SINTER命令,但它将结果保存到destination集合,而不是简单地返回结果集。如果 destination集合已经存在,则将其覆盖。destination可以是key本身。

演示

如果 destination集合已经存在,则将其覆盖。并且命令返回 destination集合的元素数量。

127.0.0.1:6379> smembers set3
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> smembers set
1) "5"
2) "6"
3) "8"
4) "12"
5) "13"
6) "17"
7) "21"
8) "23"
127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> sinterstore set3 set set2
(integer) 3
127.0.0.1:6379> smembers set3
1) "12"
2) "17"
3) "23"

如果 destination不存在,命令会先创建一个空集合,再在这个空集合上执行该命令。

127.0.0.1:6379> exists set5
(integer) 0
127.0.0.1:6379> sinterstore set5 set set2
(integer) 3
127.0.0.1:6379> smembers set5
1) "12"
2) "17"
3) "23"

当给定的destination或多个key中存在不是集合的类型时,命令会返回错误。

SUNION

SUNION key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是所有给定集合的成员数量之和。

返回所有给定集合的并集。不存在的key同样被视为空集。

演示

返回所有给定集合的并集。

127.0.0.1:6379> smembers set3
1) "12"
2) "17"
3) "23"
4) "50"
5) "79"
6) "100"
7) "101"
127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> smembers set
1) "5"
2) "6"
3) "8"
4) "12"
5) "13"
6) "17"
7) "21"
8) "23"
127.0.0.1:6379> sunion set set2 set3
 1) "5"
 2) "6"
 3) "8"
 4) "12"
 5) "13"
 6) "17"
 7) "21"
 8) "23"
 9) "25"
10) "50"
11) "56"
12) "78"
13) "79"
14) "90"
15) "100"
16) "101"

当给定的key中存在不是集合的类型时,命令会返回错误。

SUNIONSTORE

SUNIONSTORE destination key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是所有给定集合的成员数量之和。

这个命令类似于SUNION命令,但它将结果保存到destination集合,而不是简单地返回结果集。如果 destination集合已经存在,则将其覆盖。destination可以是key本身。

演示

如果 destination集合已经存在,则将其覆盖。并且命令返回 destination集合的元素数量。

127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> smembers set
1) "5"
2) "6"
3) "8"
4) "12"
5) "13"
6) "17"
7) "21"
8) "23"
127.0.0.1:6379> smembers set4
1) "0"
2) "7"
3) "8"
4) "9"
127.0.0.1:6379> sunionstore set4 set set2
(integer) 12
127.0.0.1:6379> smembers set4
 1) "5"
 2) "6"
 3) "8"
 4) "12"
 5) "13"
 6) "17"
 7) "21"
 8) "23"
 9) "25"
10) "56"
11) "78"
12) "90"

如果 destination不存在,命令会先创建一个空集合,再在这个空集合上执行该命令。

127.0.0.1:6379> exists set5
(integer) 0
127.0.0.1:6379> sunionstore set5 set set2
(integer) 12
127.0.0.1:6379> smembers set5
 1) "5"
 2) "6"
 3) "8"
 4) "12"
 5) "13"
 6) "17"
 7) "21"
 8) "23"
 9) "25"
10) "56"
11) "78"
12) "90"

当给定的destination或多个key中存在不是集合的类型时,命令会返回错误。

SDIFF

SDIFF key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是所有给定集合的成员数量之和。

返回所有给定集合之间的差集。不存在的key会被视为空集。

演示

命令返回一个包含差集成员的列表。

127.0.0.1:6379> smembers set
1) "5"
2) "6"
3) "8"
4) "12"
5) "13"
6) "17"
7) "21"
8) "23"
127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> smembers set3
1) "12"
2) "17"
3) "21"
4) "50"
5) "79"
6) "100"
7) "101"
127.0.0.1:6379> sdiff set set2 set3
1) "5"
2) "6"
3) "8"
4) "13"

当给定的key中存在不是集合的类型时,命令会返回错误。

SDIFFSTORE

SDIFFSTORE destination key [key …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是所有给定集合的成员数量之和。

这个命令和SDIFF命令类似,但它将结果保存到destination集合,而不是简单地返回结果集。如果destination集合已经存在,则将其覆盖。destination可以是key本身。

演示

如果destination集合已经存在,则将其覆盖。

127.0.0.1:6379> smembers set3
1) "12"
2) "17"
3) "23"
4) "50"
5) "79"
6) "100"
7) "101"
127.0.0.1:6379> smembers set2
1) "12"
2) "17"
3) "23"
4) "25"
5) "56"
6) "78"
7) "90"
127.0.0.1:6379> smembers set5
1) "12"
2) "17"
3) "23"
127.0.0.1:6379> sdiffstore set3 set2 set5
(integer) 4
127.0.0.1:6379> smembers set3
1) "25"
2) "56"
3) "78"
4) "90"

如果 destination不存在,命令会先创建一个空集合,再在这个空集合上执行该命令。

127.0.0.1:6379> exists set10
(integer) 0
127.0.0.1:6379> sdiffstore set10 set2 set5
(integer) 4
127.0.0.1:6379> smembers set10
1) "25"
2) "56"
3) "78"
4) "90"

当给定的destination或多个key中存在不是集合的类型时,命令会返回错误。

Redis中集合的SINTER、SINTERSTORE、SUNION、SUNIONSTORE、SDIFF、SDIFFSTORE命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITKaven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值