简介
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"