Set类型相关命令
单值多value,并且value不重复,类似Java中的HashSet类型。
1. SADD命令
语法: SADD key field value [field value ...]
将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含被添加的元素作为成员的集合。 当集合 key 不是集合类型时,返回一个错误。
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
与运行带有一个参数key
的SINTER
有同样的效果。
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 。
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
错误。
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 。
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
的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.
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
只返回随机成员但是不删除这些返回的成员。 应用场景: 抽奖程序,课堂点名
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
只会存在于source
和destination
其中之一。如果集合source
不存在,或者要移动的成员不是集合source
的成员,什么也不执行并返回0。在其它情况下,从集合source
中删除成员并添加到集合destination
。如果要移动的元素在集合destination
中已经存在,那么只是从集合source
中删除该成员。如果source
或destination
不是集合类型则返回错误。返回值有两种:
- 1 移动元素成功。
- 0 如果要移动的 element 不是source 的成员,什么也不执行。
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将视为空集。
127.0.0.1:6379> sdiff myset set1
1) "c"
2) "5"
9. SUNION命令
语法: SUNION key [key ...]
用于返回所有给定集合的并集。 应用场景: QQ你可能认识的人功能
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 ...]
返回所有给定集合的成员交集。
127.0.0.1:6379> sinter myset set1
1) "4"
10. SINTERCARD命令
语法: SINTERCARD numkeys key [key ...] [LIMIT limit]
返回由所有给定集合的交集产生的集合的大小, numkeys
指的是求交集的集合数目,如果key列表不存在或者列表大小为0,返回空,默认交集是比较所有列表的元素,若加上LIMIT
参数,默认为0,表示无限制, 将限制比较集合的结果集的大小,计算交集到达limit大小时可以提前结束。
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