Redis 入门(二):五大类型 4:集合类型

介绍

  • 集合类型的经常使用操做是向集合中加入或删除元素、判断某个元素是否存在等,因为集合类型在 Redis 内部是使用值为空的散列表实现的,因此这些操做的时间复杂度都是O(1)。

命令

1.增长/删除元素redis

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

SADD 命令用来向集合中增长一个或多个元素,若是键不存在则会自动建立。由于在一个集合中不能有相同的元素,因此若是要加入的元素已经存在于集合中就会忽略这个元素。本命令的返回值是成功加入的元素数量。code

redis> SADD letters a
(integer) 1
redis> SADD letters a b c
(integer) 2

第二条SADD命令的返回值为2是由于元素“a”已经存在,因此实际上只加入了两个元素。
SREM 命令用来从集合中删除一个或多个元素,并返回删除成功的个数。io

redis> SREM letters c d 
(integer) 1

因为元素“d”在集合中不存在,因此只删除了一个元素,返回值为 1。入门

2.得到集合中的全部元素ember

SMEMBERS key

SMEMBERS 命令会返回集合中的全部元素。集合

redis> SMEMBERS letters
1) "b"
2) "a"

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

SISMEMBER key member

当值存在时返回1,不存在时返回0。时间

redis> SISMEMBERS letters a
(integer) 1
redis> SISMEMBERS letters d
(integer) 0

4.集合间运算ant

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

SDIFF 命令用来对多个集合执行差集运算。co

redis> SADD setA 1 2 3
(integer) 3
redis> SADD setB 2 3 4
(integer) 3
redis> SDIFF setA setB
1) "1"
redis> SDIFF setB setA
1) "4"

SDIFF 命令支持同时传入多个键

redis> SADD setC 2 3 
(integer) 2
redis> SDIFF setA setB setC
1) "1"

计算顺序为:setA - setB 以后的结果 - setC

SINTER 命令用来对多个集合执行交集运算。

redis> SINTER setA setB
1) "2"
2) "3"

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

redis> SINTER setA setB setC
1) "2"
2) "3"

SUNION 命令用来对多个集合执行并集运算。

redis> SUNION setA setB
1) "1"
2) "2"
3) "3"
4) "4"

SUNION 命令一样支持多个键,这里就不赘述了。
5.得到集合中元素个数

SCARD key

例如:

redis> SMEMBERS letters
1) "b"
2) "a"
redis> SCARD letters
(integer) 2

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

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

SDIFFSTORE 命令与 SDIFF命令功能同样,惟一的区别就是前者不会直接返回运算结果,而是将结果存储在 destiantion 键中。
SDIFFSTORE 命令经常使用于须要进行多步集合运算的场景中,如须要先计算差集再将结果和其余键计算交集。
SINTERSTORE 和 SUNIONSTORE 命令与之相似,再也不赘述。
7.随机得到集合中的元素
SRANDMEMBER key [count]
SRANDMEMBER 命令用来随机从集合中获取一个元素。

redis> SRANDMEMBER letters
"a"
redis> SRANDMEMBER letters
"b"
redis> SRANDMEMBER letters
"a"

还能够传递count参数来一次随机得到多个元素,根据count的正负不一样,具体表现也不一样。
(1)当count为正数时,SRANDMEMBER 会随机从集合里得到 count 个不重复的元素。若是 count 的值大于集合中的元素个数,则 SRANDMEMBER 会返回集合中的所有元素。
(2)当count为负数时,SRANDMEMBER 会随机从集合里得到|count|个的元素,这些元素都有可能相同。

redis> SADD letters c d
(integer) 2

目前letters集合中有 “a”,“b”,“c”,“d”。

redis> SRANDMEMBER letters 2
1) "a"
2) "c"
redis> SRANDMEMBER letters 2
1) "a"
2) "b"
redis> SRANDMEMBER letters 100
1) "b"
2) "a"
3) "c"
4) "d"
redis> SRANDMEMBER letters -2
1) "b"
2) "b"
redis> SRANDMEMBER letters -10
1) "b"    
2) "b"    
3) "a"    
4) "c"    
5) "b"    
6) "a"    
7) "b"    
8) "d"    
9) "b"    
10) "b"

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

SPOP key

由于集合是无序的,因此弹出元素也是随机的。

redis> SPOP letters
"b"
redis> SMEMBERS letters
1) "a"
2) "c"
3) "d"

整理自《Redis 入门指南第二版》。

相关文章
相关标签/搜索