你必须非常努力,才能看起来毫不费力!
微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !
前言
Set,即集合,与数学中的集合概念一致,不过Redis Set中包含的元素类型是string。Set中元素值是唯一的,不能出现重复的数据。上篇文章介绍了Set类型中,单个集合的操作,下面就来看下多个集合之间操作相关的指令吧。
SINTER
可用版本:>= 1.0.0
时间复杂度:O(N*M),N为所有给定集合中最小的集合长度,M为给定集合的个数
命令格式
SINTER key [key ...]
命令描述
- 返回给定集合的交集
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
- 当给定集合中包含空集时,返回的结果一定也是空集,因为空集与其他集合的交集一定是空集
返回值
数组:所有集合交集的元素列表
示例
127.0.0.1:6379> sadd myset hello world
(integer) 2
127.0.0.1:6379> sadd otherset hello
(integer) 1
127.0.0.1:6379> sinter myset otherset
1) "hello"
SINTERSTORE
可用版本:>= 1.0.0
时间复杂度:O(N*M),N为所有给定集合中最小的集合长度,M为给定集合的个数
命令格式
SINTERSTORE destination key [key ...]
命令描述
- 命令与与
SINTER
功能类似,即取多个集合的交集,但是不返回结果,而是将结果保存到destination
中 - 如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
# dest集合
127.0.0.1:6379> sadd dest test
(integer) 1
127.0.0.1:6379> smembers dest
1) "test"
# 两个集合
127.0.0.1:6379> sadd myset hello world
(integer) 2
127.0.0.1:6379> sadd myset2 hello world lifelmy
(integer) 3
# 取交集后存入dest
127.0.0.1:6379> sinterstore dest myset myset2
(integer) 2
# dest中原有的“test”被覆盖掉
127.0.0.1:6379> smembers dest
1) "hello"
2) "world"
SUNION
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
SUNION key [key ...]
命令描述
- 返回给定集合的并集
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
返回值
数组:所有集合并集的元素列表
示例
127.0.0.1:6379> sadd uset hello world
(integer) 2
127.0.0.1:6379> sadd uset1 lifelmy test
(integer) 2
127.0.0.1:6379> sunion uset uset1
1) "lifelmy"
2) "hello"
3) "test"
4) "world"
SUNIONSTORE
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
SUNIONSTORE destination key [key ...]
命令描述
- 命令与与
SUNION
功能类似,即取多个集合的并集,但是不返回结果,而是将结果保存到destination
中 - 如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
127.0.0.1:6379> sadd uset hello world
(integer) 2
127.0.0.1:6379> sadd uset1 lifelmy test
(integer) 2
127.0.0.1:6379> sunion uset uset1
1) "lifelmy"
2) "hello"
3) "test"
4) "world"
SDIFF
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
SDIFF key [key ...]
命令描述
- 返回第一个集合,与后续所有集合的差集
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
返回值
数组:结果集的元素列表
示例
127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 a b
(integer) 2
127.0.0.1:6379> sadd key3 a b c
(integer) 3
# key1集合与 key2 key3集合的差集
127.0.0.1:6379> sdiff key1 key2 key3
1) "d"
SDIFFSTORE
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
SDIFFSTORE destination key [key ...]
命令描述
- 命令与与
SDIFF
功能类似,即计算第一个集合与后续给定集合的差集,但是不返回结果,而是将结果保存到destination
中 - 如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 a b
(integer) 2
127.0.0.1:6379> sadd key3 a b c
(integer) 3
# 取差集后,结果保存到key4集合中
127.0.0.1:6379> sdiffstore key4 key1 key2 key3
(integer) 1
127.0.0.1:6379> smembers key4
1) "d"
更多
个人博客: lifelmy.github.io/
微信公众号:漫漫Coding路