Skip to content

Set类型相关命令

单值多value,并且value不重复,类似Java中的HashSet类型。

1. SADD命令

语法: SADD key field value [field value ...]
将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含被添加的元素作为成员的集合。 当集合 key 不是集合类型时,返回一个错误。

sh
127.0.0.1:6379> sadd myset 1 1 4 a b c b
(integer) 5
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> smembers myset
1) "1"
2) "4"
3) "a"
4) "b"
5) "c"
6) "hello"

2. SMEMBERS命令

语法: SMEMBERS key
返回存储在key中的集合的所有的成员。不存在的集合被视为空集合。SISMEMBER与运行带有一个参数keySINTER有同样的效果。

sh
127.0.0.1:6379> smembers myset
1) "1"
2) "4"
3) "a"
4) "b"
5) "c"
6) "hello"
127.0.0.1:6379> smembers myset000
(empty array)

2. SISMEMBER命令

语法: SISMEMBER key member
用于判断元素member是否集合key的成员。对于具体某个成员member来说,如果member是集合成员返回1,如果member不是集合成员返回0 。

sh
127.0.0.1:6379> sismember myset a
(integer) 1
127.0.0.1:6379> sismember myset aa
(integer) 0
127.0.0.1:6379> sismember myset000 aa
(integer) 0

3. SREM命令

语法: SREM key member [member ...]
用于在集合中删除指定的元素。如果指定的元素不是集合成员则被忽略。如果集合key不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回ERR WRONGTYPE Operation against a key holding the wrong kind of value错误。

sh
127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> smembers myset
1) "1"
2) "4"
3) "a"
4) "b"
5) "c"
127.0.0.1:6379> srem myset hello
(integer) 0

4. SCARD命令

语法: SCARD key
返回集合中元素的数量。当集合key不存在时,返回 0 。

sh
127.0.0.1:6379> scard myset
(integer) 6
127.0.0.1:6379> scard myset000
(integer) 0

5. SRANDMEMBER命令

语法: SRANDMEMBER key [count]
如果仅使用key参数,那么随机返回集合key中的一个随机元素。配合count使用的话,如果count是整数且小于元素的个数,返回含有count个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.

sh
127.0.0.1:6379> srandmember myset
"1"
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> srandmember myset
"a"
127.0.0.1:6379> srandmember myset -1
1) "1"
127.0.0.1:6379> srandmember myset 2
1) "1"
2) "4"
127.0.0.1:6379> srandmember myset -10
 1) "b"
 2) "a"
 3) "a"
 4) "4"
 5) "a"
 6) "1"
 7) "4"
 8) "a"
 9) "1"
10) "4"

6. SPOP命令

语法: SPOP key [count]
用于从集合 key中删除并返回一个或多个随机元素。和SRANDMEMBER相似, 区别是SRANDMEMBER只返回随机成员但是不删除这些返回的成员。 应用场景: 抽奖程序,课堂点名

sh
127.0.0.1:6379> spop myset 
"b"
127.0.0.1:6379> spop myset 
"1"
127.0.0.1:6379> spop myset 
"a"
127.0.0.1:6379> smembers myset
1) "4"
2) "c"

7. SMOVE命令

语法: SMOVE source destination member
用于从集合source中移动成员member到集合destination。这个操作是原子操作。在任何时刻,member只会存在于sourcedestination其中之一。如果集合source不存在,或者要移动的成员不是集合source的成员,什么也不执行并返回0。在其它情况下,从集合source中删除成员并添加到集合destination。如果要移动的元素在集合destination中已经存在,那么只是从集合source中删除该成员。如果sourcedestination不是集合类型则返回错误。返回值有两种:

  • 1 移动元素成功。
  • 0 如果要移动的 element 不是source 的成员,什么也不执行。
sh
127.0.0.1:6379> sadd set1 1 2 3 4 5 5 6
(integer) 6
127.0.0.1:6379> smove set1 myset 5
(integer) 1
127.0.0.1:6379> smove set1 myset 9
(integer) 0
127.0.0.1:6379> smembers myset
1) "4"
2) "c"
3) "5"

8. SDIFF命令

语法: SDIFF key [key ...]
用于计算两个集合差集运算,返回第一个集合中独有的元素。不存在的集合key将视为空集。

sh
127.0.0.1:6379> sdiff myset set1
1) "c"
2) "5"

9. SUNION命令

语法: SUNION key [key ...]
用于返回所有给定集合的并集。 应用场景: QQ你可能认识的人功能

sh
127.0.0.1:6379> smembers set2
(empty array)
127.0.0.1:6379> sunion set2 myset set1
1) "4"
2) "c"
3) "5"
4) "1"
5) "2"
6) "3"
7) "6"

10. SINTER命令

语法: SINTER key [key ...]
返回所有给定集合的成员交集。

sh
127.0.0.1:6379> sinter myset set1
1) "4"

10. SINTERCARD命令

语法: SINTERCARD numkeys key [key ...] [LIMIT limit]
返回由所有给定集合的交集产生的集合的大小, numkeys指的是求交集的集合数目,如果key列表不存在或者列表大小为0,返回空,默认交集是比较所有列表的元素,若加上LIMIT参数,默认为0,表示无限制, 将限制比较集合的结果集的大小,计算交集到达limit大小时可以提前结束。

sh
127.0.0.1:6379> sinter myset set1
1) "4"
127.0.0.1:6379> sintercard 2 myset set1 
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sintercard 2 myset set1 
(integer) 2
127.0.0.1:6379> sintercard 2 myset set1 limit 1
(integer) 1