学习了列表之后,发现了Redis处理字符串的功能强大。

为了适应不同场景的需求,还有一个用的很多的就是集合。

Redis提供的集合支持的类型是字符串。并且集合中的元素值是唯一的,也就是说不能出现重复数据。

而且,集合的实现是通过哈希的方式,在修改集合的时候复杂度都为O(1)。

Redis支持集合的最大数量为2^32 - 1个。

 

1、SADD 命令


用于将一个或多个元素加入到指定的集合中,由于集合不存在重复元素,所以已经存在的成员会被忽略。

如果指定的集合不存在,则该命令会创建该集合,并且把元素加入进去。

如果指定的KEY不是一个集合,则返回一个错误说明。


127.0.0.1:6379> SADD KEY MEMBER [member ...]



例如,



127.0.0.1:6379> SET SET A
OK
127.0.0.1:6379> SADD SET 1 2 3 4 5 
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> SADD SET1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"



2、SCARD 命令


用于返回指定集合中元素的数量。



127.0.0.1:6379> SCARD KEY



例如,



127.0.0.1:6379> SCARD SET1
(integer) 5



3、SDIFF 命令


用于返回给定集合之间的差集。

一定是前面的集合减去后面的集合,剩余的元素。



127.0.0.1:6379> SDIFF KEY KEY [key ...]



例如,



127.0.0.1:6379> sadd SET 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd SET1 1 2 3 
(integer) 3
127.0.0.1:6379> sdiff SET1 SET
(empty list or set)
127.0.0.1:6379> sdiff SET SET
(empty list or set)
127.0.0.1:6379> sdiff SET SET1
1) "4"
2) "5"
127.0.0.1:6379> sadd SET2 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> sdiff SET SET1 SET2
(empty list or set)
127.0.0.1:6379> sdiff SET2 SET1 SET
1) "6"



4、SDIFFSTORE 命令


用于将给定集合之间的差集存储在指定的集合中。

如果指定的DESTINATION集合已存在,则里面的元素会被覆盖。



127.0.0.1:6379> SDIFFSTORE DESTINATION KEY KEY [key ...]



例如,



127.0.0.1:6379> SDIFFSTORE SET2 SET SET1
(integer) 2
127.0.0.1:6379> SMEMBERS SET2
1) "4"
2) "5"
127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"



5、SINTER 命令


用于返回给定所有集合的交集。

不存在的集合被视为空集,当给定的集合当中有一个时空集时,结果也为空集。



127.0.0.1:6379> SINTER KEY KEY [key ...]



例如,



127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SINTER SET SET1
1) "1"
2) "2"
3) "3"



6、SINTERSTORE 命令


用于将给定集合之间的交集存储在指定的集合中。

如果指定的DESTINATION集合已存在,则里面的元素会被覆盖。



127.0.0.1:6379> SINTERSTORE DESTINATION KEY KEY [key ...]



例如,



127.0.0.1:6379> SINTERSTORE SET2 SET SET1
(integer) 3
127.0.0.1:6379> SMEMBERS SET2
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"



7、SISMEMBER 命令


用于判断给定的元素是否为指定集合的成员。

如果给定的元素是集合成员,则返回1,如果不是,则返回0。



127.0.0.1:6379> SISMEMBER KEY MEMBER



例如,



127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> sismember SET 0
(integer) 0
127.0.0.1:6379> sismember SET 1
(integer) 1



8、SMEMBERS 命令


用于返回指定集合中所有的成员。不存在的集合被视为空集。



127.0.0.1:6379> SMEMBERS KEY



例如,



127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SMEMBERS SE
(empty list or set)



 

9、SMOVE 命令


用于将指定成员元素从SOURCE集合移动到DESTINATION集合中。

并且,SMOVE是原子性操作。

如果SOURCE集合不存在或者不包含指定的元素,则不执行任何操作,返回0。

如果DESTINATION集合中已经包含了指定元素,SMOVE操作将该元素从SOURCE集合中删除。

如果SOURCE与DESTINATION不是集合类型是,则返回一个错误说明。



127.0.0.1:6379> SMOVE SOURCE DESTINATION MEMBER



例如,



127.0.0.1:6379> SMEMBERS SET
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMOVE SET SET1 4
(integer) 1
127.0.0.1:6379> SMOVE SET SET1 5
(integer) 1
127.0.0.1:6379> SMOVE SET SET1 6
(integer) 0



10、SPOP 命令


用于随机获取指定集合中的一个或几个元素,并且该元素从集合中删除。

获取的个数由COUNT指定,当指定的个数超过集合的元素个数时,仅返回剩余元素。

当集合为空时,返回空集。COUNT只能为正数,如果是负数,则返回一个错误说明。



127.0.0.1:6379> SPOP KEY [count]



例如,



127.0.0.1:6379> SPOP SET 1
1) "1"
127.0.0.1:6379> SPOP SET 3
1) "2"
2) "3"
127.0.0.1:6379> SPOP SET 3
(empty list or set)
127.0.0.1:6379> SPOP SET -1
(error) ERR index out of range



11、SRANDMEMBER 命令


用于随机获取指定集合中的一个或几个元素但不删除,并且获取的个数由COUNT指定。

如果COUNT是正数,且小于集合基数,则返回COUNT个元素的数组,其中元素内容不重复。

如果COUNT是正数,且大于集合基数,则返回整个集合。

如果COUNT是负数,则返回COUNT个元素的数组,数组中的元素可以重复。

当集合为空时,返回空集。



127.0.0.1:6379> SRANDMEMBER SET [count]



例如,



127.0.0.1:6379> SRANDMEMBER SET 4
1) "9"
2) "8"
3) "5"
4) "6"
127.0.0.1:6379> SRANDMEMBER SET 4
1) "9"
2) "2"
3) "8"
4) "6"
127.0.0.1:6379> SRANDMEMBER SET -2
1) "8"
2) "2"
127.0.0.1:6379> SRANDMEMBER SET -2
1) "2"
2) "5"
127.0.0.1:6379> SRANDMEMBER SET -8
1) "10"
2) "3"
3) "3"
4) "10"
5) "1"
6) "6"
7) "8"
8) "10"



12、SREM 命令


用于删除给定集合中的一个或几个元素,不存在的元素将被忽略。

当KEY不是一个集合时,则返回一个错误说明。



127.0.0.1:6379> SREM KEY MEMBER [member ...]



例如,



127.0.0.1:6379> SMEMBERS SET
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 6) "6"
 7) "7"
 8) "8"
 9) "9"
10) "10"
127.0.0.1:6379> SREM SET 1 3 5 7 9 11
(integer) 5
127.0.0.1:6379> SMEMBERS SET
1) "2"
2) "4"
3) "6"
4) "8"
5) "10"



13、SUNION 命令


用于返回给定集合的并集。不存在的集合被视为空集。



127.0.0.1:6379> SUNION KEY KEY [key ...]



例如,



127.0.0.1:6379> SUNION SET SET1 SET2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "8"
8) "10"
127.0.0.1:6379> SMEMBERS SET
1) "2"
2) "4"
3) "6"
4) "8"
5) "10"
127.0.0.1:6379> SMEMBERS SET1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SMEMBERS SET2
1) "1"
2) "2"
3) "3"



14、SUNIONSTORE 命令


用于将给定的集合的并集存储在指定的集合DESTINATION中。

如果指定的DESTINATION集合已存在,则里面的元素会被覆盖。



127.0.0.1:6379> SUNIONSTORE DESTINATION KEY KEY [key ...]



例如,



127.0.0.1:6379> SMEMBERS SET2
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SUNIONSTORE SET2 SET SET1
(integer) 8
127.0.0.1:6379> SMEMBERS SET2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "8"
8) "10"
127.0.0.1:6379>



15、SSCAN 命令


SCAN命令及其相关的SSCAN命令、HSCAN命令和ZSCAN命令都用于增量地迭代一集元素。

SSCAN命令用于迭代集合键中的元素。

与SCAN命令类型。



127.0.0.1:6379> sscan SET cursor [MATCH pattern] [COUNT count]



例如,



127.0.0.1:6379> SSCAN SET 0 MATCH *
1) "0"
2) 1) "2"
   2) "4"
   3) "6"
   4) "8"
   5) "10"
127.0.0.1:6379> SSCAN SET 0 
1) "0"
2) 1) "2"
   2) "4"
   3) "6"
   4) "8"
   5) "10"