Redis 基础命令 --- Set篇

实验环境

操作系统: ubuntu-16.04-x64
redis版本: 4.0.9

概述

Set又名为集合,集合中的元素具有唯一性,每个元素都是不同的,且没有顺序。一个集合类型的键可以存储至多2^32 - 1个字段。
集合类型的常用操作是向集合中加入或删除,判断某个元素是否存在等,由于集合类型在redis内部使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1)。

命令

1.增加/删除元素

SADD key member [member ...]
SREM key member [member ...]

SADD命用来向集合中增加一个或多个元素,如果键不存在则自动创建。因为集合元素具有唯一性。本命令返回成功加入的元素数量。
例:

127.0.0.1:6379> SADD set1 a 
(integer) 1
127.0.0.1:6379> SADD set1 a  b c
(integer) 2

SREM用来删除一个或多个元素,并返回删除成功的个数。

127.0.0.1:6379> SADD set1 a  b c 
(integer) 3
127.0.0.1:6379> SREM set1 c d 
(integer) 1

2.获得集合中的所有元素

SMEMBERS key

例:

127.0.0.1:6379> SADD set1 a b c d
(integer) 4
127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "c"
3) "b"
4) "a"

3.判断元素是否在集合中

SISMEMBER key member

当值存在时返回1,否则返回0。
例:

127.0.0.1:6379> SADD set1 a b c d 
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> SISMEMBER set1 a
(integer) 1
127.0.0.1:6379> SISMEMBER set1 e
(integer) 0

4.集合间运算

SDIFF key [key ...]
SINTER key [key ...]
SUNION key [key ...]

SDIFF命令用来对多个集合执行差集运算。集合A与集合B的差集表示为A - B,代表所有属于A且不属于B的元素构成的集合,即A - B = {e | e∈A 且 e ∉ B}。例如:
{1,2,3} - {2,3,4} = {1}
{2,3,4} - {1,2,3} = {4}
例:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SDIFF set1 set2
1) "1"
127.0.0.1:6379> SDIFF set2 set1
1) "4"

SDIFF命令支持同时传入多个键。例如:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SADD set3 2 3
(integer) 2
127.0.0.1:6379> SDIFF set1 set2 set3
1) "1"
#计算顺序是先计算set1 - set2 ,然后再计算与set3的差集  

SINTER命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A∩B,代表属于A且属于B的元素构成的集合,即
A ∩ B = {e | e ∈ A 且 e ∈ B}。例如:
{1,2,3} {2,3,4} = {2,3}
例:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SINTER set1 set2
1) "2"
2) "3"

SINTER命令同样支持同时传入多个键。

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SADD set3 2 7
(integer) 2
127.0.0.1:6379> SINTER set1 set2 set3 
1) "2"

SUNION命令用来对多个集合执行并集操作。集合A与集合B的并集表示为A∪B,代表所有属于A或属于B的元素构成的集合,即A∪B = { e | e ∈ A 或 e ∈ B }。例如:
{1,2,3} ∪ {2,3,4} = {1,2,3,4}
例:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SUNION set1 set2
1) "1"
2) "2"
3) "3"
4) "4"

SUNION 命令同样支持同时传入多个键,例如:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SADD set2 2 3 4
(integer) 3
127.0.0.1:6379> SADD set3 3 4 5
(integer) 3
127.0.0.1:6379> SUNION set1 set2 set3 
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

5.获得集合元素个数

SCARD key

例:

127.0.0.1:6379> SADD set1 1 2 3 4
(integer) 4
127.0.0.1:6379> SCARD set1
(integer) 4

6.进行集合运算并将结果存储

SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]

SDIFFSTORE 命令和SDIFF命令功能一样,唯一的区别是前者不会直接返回运算结果,而是将结果存储在destination键中。
例:

127.0.0.1:6379> SADD set1 1 2 3 4
(integer) 4
127.0.0.1:6379> SADD set2 2 3 45
(integer) 3
127.0.0.1:6379> SDIFFSTORE set3 set1 set2 
(integer) 2
127.0.0.1:6379> SMEMBERS set3 
1) "1"
2) "4"

SINTERSTORE和SUNIONSTORE 命令与之类似。

7.随机获得集合中的元素

SRANDMEMBER key [count]

SRANDMEMBER命令用来随机从集合中获取元素,根据count参数的不同,具体表现也不同。
(1)当count为正数时,SRANDMEMBER会随机从集合里获得count个不重复的元素,如果count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。

127.0.0.1:6379> SADD set1 a b c d e
(integer) 5
127.0.0.1:6379> SRANDMEMBER set1 2
1) "b"
2) "e"
127.0.0.1:6379> SRANDMEMBER set1 10
1) "b"
2) "a"
3) "d"
4) "c"
5) "e"

(2)当count为负数时,SRANDMEMBER会随机从集合里获得| count |个元素,这些元素有可能相同。

127.0.0.1:6379> SADD set1 a b c d e
(integer) 5
127.0.0.1:6379> SRANDMEMBER set1 -3 
1) "b"
2) "c"
3) "b"
127.0.0.1:6379> SRANDMEMBER set1 -10
 1) "c"
 2) "b"
 3) "b"
 4) "c"
 5) "c"
 6) "e"
 7) "b"
 8) "c"
 9) "c"
10) "e"

8.从集合中弹出一个元素或多个元素

SPOP key [count]

SPOP命令的作用与LPOP类似,但由于集合类型元素的无序性,所以SPOP命令会从集合中随机选择count个元素弹出。
例:

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SPOP set1 
"1"

127.0.0.1:6379> SADD set1 1 2 3
(integer) 3
127.0.0.1:6379> SPOP set1 2
1) "3"
2) "2"

猜你喜欢

转载自blog.csdn.net/cl2010abc/article/details/80405084
今日推荐