6.redis 数据类型之set 集合

redis 数据类型之set 集合

集合简介

  • Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

  • Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  • 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

集合操作命令

sadd

SADD key member1 [member2]

向集合添加一个或多个成员

1
2
127.0.0.1:6379> sadd set 1 2 3 4 5 1
(integer) 5

通过上面的返回值可以看出,其实存储进去的只有5个值,所以也可以看出set集合是不可重复的。

smembers

SMEMBERS key

上面使用了sadd添加命令,往集合中添加了数据。下面我们将集合的成员查询出来:

1
2
3
4
5
6
127.0.0.1:6379> smembers set
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

scard

SCARD key

通过scard命令,可以获取集合的成员个数。如下:

1
2
127.0.0.1:6379> scard set
(integer) 5

sismember

SISMEMBER key member

判断member元素是否是集合key的成员。如果元素是集合中的成员,则返回1,否则返回0。如下:

1
2
3
4
127.0.0.1:6379> sismember set 1
(integer) 1
127.0.0.1:6379> sismember set 9
(integer) 0

spop

SPOP key [count]

spop命令用于移除集合中的指定key的一个或多个随机元素。移除后会返回移除的元素。

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> sadd num 1 2 3 4 5
(integer) 5
127.0.0.1:6379> spop num 1
1) "3"
127.0.0.1:6379> spop num 2
1) "4"
2) "5"
127.0.0.1:6379> smembers num
1) "1"
2) "2"

通过执行结果可以看出,已经将返回的元素删除了。

srandmember

SRANDMEMBER KEY [count]

  • 如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数据中的元素各不相同。如果count大于等于集合基数,那么返回整个集合。
  • 如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
127.0.0.1:6379> sadd num 1 2 3 4 5
(integer) 5
127.0.0.1:6379> srandmember num 2
1) "3"
2) "2"
127.0.0.1:6379> srandmember num 2
1) "2"
2) "1"
127.0.0.1:6379> srandmember num 5
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> srandmember num 6
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> srandmember num -3
1) "5"
2) "5"
3) "4"

srem

SREM key member1 [member2]

srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

1
2
3
4
5
6
7
8
127.0.0.1:6379> sadd num 1 2 3 4 5
(integer) 0
127.0.0.1:6379> srem num 1 2 6
(integer) 2
127.0.0.1:6379> smembers num
1) "3"
2) "4"
3) "5"

返回值即被成功移除的元素的数量,不包含的元素忽略。

smove

SMOVE SOURCE DESTINATION MEMBER

smove 命令将指定成员member元素从source集合中移动到destination集合中。smove是原子性操作。

  • 如果source集合不存在或是不包含指定的member元素,则smove命令不执行任何操作,仅返回0. 否则,member元素从source集合中被移除,并添加到destination集合中取。
  • 当destination集合中已经包含member元素时,smove命令只是简单地将source集合中的元素删除而已。
  • 当source或destination不是集合类型时,返回错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> smembers num
1) "3"
2) "4"
3) "5"
127.0.0.1:6379> smove num newNum 3 4
(error) ERR wrong number of arguments for 'smove' command
127.0.0.1:6379> smove num newNum 3
(integer) 1
127.0.0.1:6379> smove num newNum 3
(integer) 0
127.0.0.1:6379> smove num newNum 4
(integer) 1
127.0.0.1:6379> smembers num
1) "5"
127.0.0.1:6379> smembers newNum
1) "3"
2) "4"

同时通过执行命令可以看出,执行smove命令时,只允许一次move一个元素。

sinter

SINTER key1 [key2]

sinter 命令返回给定所有集合的交集。不存在的集合key视为空集。当给定集合中有一个空集时,结果也为空集(根据集合运算定律)。

1
2
3
4
5
6
7
127.0.0.1:6379> sadd num1 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd num2 3 4 5 6
(integer) 4
127.0.0.1:6379> sinter num1 num2
1) "3"
2) "4"

sinterstore

SINTERSTORE destination key1 [key2]

sinterstore 命令将给定集合之间的交集存储在给定的destination集合中。如果指定的集合已经存在了,则将其覆盖。

1
2
3
4
5
127.0.0.1:6379> sinterstore num3 num1 num2
(integer) 2
127.0.0.1:6379> smembers num3
1) "3"
2) "4"

sdiff

SDIFF key1 [key2]

sdiff 命令返回给定集合之间的差集。不存在的集合key将视为空集。

差集的结果来自前面的first_key, 而不是后面的other_key。如下:

1
2
3
4
5
6
127.0.0.1:6379> sdiff num1 num2
1) "1"
2) "2"
127.0.0.1:6379> sdiff num2 num1
1) "5"
2) "6"

sdiffstore

SDIFFSTORE destination key1 [key2]

sdiffstore 命令将给定的集合之间的差集存储到指定的destination集合中。如果指定的集合key已经存在,则会被覆盖。

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> sdiffstore num4 num1 num2
(integer) 2
127.0.0.1:6379> smembers num4
1) "1"
2) "2"
127.0.0.1:6379> sdiffstore num4 num2 num1
(integer) 2
127.0.0.1:6379> smembers num4
1) "5"
2) "6"

sunion

SUNION key1 [key2]

sunion 命令返回给定集合的并集。不存在的集合key被视为空集。

1
2
3
4
5
6
7
127.0.0.1:6379> sunion num1 num2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

sunionstore

SUNIONSTORE destination key1 [key2]

sunionstore 命令将给定的集合的并集存储在指定的集合destination中。如果指定集合destination已经存在,则覆盖。

1
2
3
4
5
6
7
8
9
10
11

127.0.0.1:6379> sadd num5 11
127.0.0.1:6379> sunionstore num5 num1 num2
(integer) 6
127.0.0.1:6379> smembers num5
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

部分参考自菜鸟教程:https://www.runoob.com/redis/redis-sets.html

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×