redis 数据类型之set 集合
集合简介
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
集合操作命令
sadd
SADD key member1 [member2]
向集合添加一个或多个成员
1 | 127.0.0.1:6379> sadd set 1 2 3 4 5 1 |
通过上面的返回值可以看出,其实存储进去的只有5个值,所以也可以看出set集合是不可重复的。
smembers
SMEMBERS key
上面使用了sadd添加命令,往集合中添加了数据。下面我们将集合的成员查询出来:
1 | 127.0.0.1:6379> smembers set |
scard
SCARD key
通过scard命令,可以获取集合的成员个数。如下:
1 | 127.0.0.1:6379> scard set |
sismember
SISMEMBER key member
判断member元素是否是集合key的成员。如果元素是集合中的成员,则返回1,否则返回0。如下:
1 | 127.0.0.1:6379> sismember set 1 |
spop
SPOP key [count]
spop命令用于移除集合中的指定key的一个或多个随机元素。移除后会返回移除的元素。
1 | 127.0.0.1:6379> sadd num 1 2 3 4 5 |
通过执行结果可以看出,已经将返回的元素删除了。
srandmember
SRANDMEMBER KEY [count]
- 如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数据中的元素各不相同。如果count大于等于集合基数,那么返回整个集合。
- 如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。
1 | 127.0.0.1:6379> sadd num 1 2 3 4 5 |
srem
SREM key member1 [member2]
srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
1 | 127.0.0.1:6379> sadd num 1 2 3 4 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 | 127.0.0.1:6379> smembers num |
同时通过执行命令可以看出,执行smove命令时,只允许一次move一个元素。
sinter
SINTER key1 [key2]
sinter 命令返回给定所有集合的交集。不存在的集合key视为空集。当给定集合中有一个空集时,结果也为空集(根据集合运算定律)。
1 | 127.0.0.1:6379> sadd num1 1 2 3 4 |
sinterstore
SINTERSTORE destination key1 [key2]
sinterstore 命令将给定集合之间的交集存储在给定的destination集合中。如果指定的集合已经存在了,则将其覆盖。
1 | 127.0.0.1:6379> sinterstore num3 num1 num2 |
sdiff
SDIFF key1 [key2]
sdiff 命令返回给定集合之间的差集。不存在的集合key将视为空集。
差集的结果来自前面的first_key, 而不是后面的other_key。如下:
1 | 127.0.0.1:6379> sdiff num1 num2 |
sdiffstore
SDIFFSTORE destination key1 [key2]
sdiffstore 命令将给定的集合之间的差集存储到指定的destination集合中。如果指定的集合key已经存在,则会被覆盖。
1 | 127.0.0.1:6379> sdiffstore num4 num1 num2 |
sunion
SUNION key1 [key2]
sunion 命令返回给定集合的并集。不存在的集合key被视为空集。
1 | 127.0.0.1:6379> sunion num1 num2 |
sunionstore
SUNIONSTORE destination key1 [key2]
sunionstore 命令将给定的集合的并集存储在指定的集合destination中。如果指定集合destination已经存在,则覆盖。
1 |
|