简介

Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。
集合中最大的成员数为2的32次方 - 1。
Redis中的Set类似于Java中的HashTable集合。

赋值语法

SADD key member [member …]

向集合set中添加一个或多个成员。

Example
127.0.0.1:6379> sadd set1 a b c d e
(integer) 5
127.0.0.1:6379>

取值语法

(一)SCARD key

获取集合的成员数量

Example
127.0.0.1:6379> sadd set1 a b c d e
(integer) 5
127.0.0.1:6379> scard set1
(integer) 5

(二)SMEMBERS key

返回集合中的所有成员

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "b"
4) "c"
5) "e"

(三)SISMEMBER key member

判断 member 元素是否是集合 key 的成员

Example
127.0.0.1:6379> sadd set1 a b c d e
(integer) 5
127.0.0.1:6379> sismember set1 a
(integer) 1
127.0.0.1:6379> sismember set1 f
(integer) 0

(四)SRANDMEMBER key [count]

返回集合中一个或多个随机数,若不指定则返回一个,可以指定数量,若指定数量大于集合中的数量则返回集合中所有成员

Example
127.0.0.1:6379> srandmember set1
"b"
127.0.0.1:6379> srandmember set1 2
1) "e"
2) "c"
127.0.0.1:6379> srandmember set1 99
1) "a"
2) "e"
3) "d"
4) "b"
5) "c"

删除语法

(一)SREM key member [member …]

从存储在集合中除去指定的成员。不是该集合成员的指定成员将被忽略

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "e"
3) "d"
4) "b"
5) "c"
127.0.0.1:6379> srem set1 a b g h
(integer) 2
127.0.0.1:6379> smembers set1
1) "e"
2) "d"
3) "c"

(二)SPOP key [count]

移除并返回集合中的一个随机元素,返回被删除的元素 ,若不指定数量默认为1

Example
127.0.0.1:6379> smembers set1
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> spop set1
"d"
127.0.0.1:6379> smembers set1
1) "e"
2) "c"
127.0.0.1:6379> spop set1 2
1) "e"
2) "c"
127.0.0.1:6379> smembers set1
(empty list or set)

(三)SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合,该操作是原子操作。
如果源集不存在或不包含指定的元素,则不执行任何操作,并返回0。 否则,该元素将从源集中删除,然后添加到目标集中。 如果指定的元素已存在于目标集中,则仅将其从源集中删除。

Example
127.0.0.1:6379> keys *
1) "set1"
127.0.0.1:6379> smembers set1
1) "dog"
2) "cat"
127.0.0.1:6379> smove set1 set2 dog
(integer) 1
127.0.0.1:6379> keys *
1) "set2"
2) "set1"
127.0.0.1:6379> smembers set2
1) "dog"
127.0.0.1:6379> smembers set1
1) "cat"

差集语法

(一)SDIFF key [key …]

返回由第一个集合与所有后续集合之间的差值所产生的集合的成员。

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> smembers set2
1) "e"
2) "b"
3) "d"
4) "a"
5) "c"
127.0.0.1:6379> sdiff set1 set2
(empty list or set)
127.0.0.1:6379> sdiff set2 set1
1) "e"

(二)SDIFFSTORE destination key [key …]

这个命令等于SDIFF,但是它不是返回结果集,而是存储在destination中。

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> smembers set2
1) "e"
2) "b"
3) "d"
4) "a"
5) "c"
127.0.0.1:6379> sdiffstore resultSet set2 set1
(integer) 1
127.0.0.1:6379> smembers resultSet
1) "e"

交集语法

(一)SINTER key [key …]

返回一组的成员产生的所有给定集合的交集

Example
127.0.0.1:6379> sadd set1 a b
(integer) 2
127.0.0.1:6379> sadd set2 a b c
(integer) 3
127.0.0.1:6379> sinter set1 set2
1) "a"
2) "b"

(二)SINTERSTORE destination key [key …]

这个命令等于SINTER,但是它不是返回结果集,而是存储在destination中。

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "b"
127.0.0.1:6379> smembers set2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sinterstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "a"
2) "b"

并集语法

(一)SUNION key [key …]

返回一组的成员产生的所有给定的集的结合。

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "b"
127.0.0.1:6379> smembers set2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sunion set1 set2
1) "a"
2) "b"
3) "c"

(二)SUNIONSTORE destination key [key …]

这个命令等于SUNION,但是它不是返回结果集,而是存储在destination中。

Example
127.0.0.1:6379> smembers set1
1) "a"
2) "b"
127.0.0.1:6379> smembers set2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sunionstore set4 set1 set2
(integer) 3
127.0.0.1:6379> smembers set4
1) "a"
2) "b"
3) "c"