3.5 集合类型
3.5.1 介绍
集合类型的常用操作是向集合中加入或删除元素,判断某个元素是否存在等,由于集合类型再Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1).
3.5.2 命令
- 增加/删除元素
SADD key member [member …]
SREM key member [member …]
SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为再一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素。本命令的返回值是成功加入的元素数量(忽略的元素不计算在内).
redis> SADD letters a
(integer) 1
redis SADD letters a b c
(integer) 2
SREM命令用来删除从集合中删除一个或多个元素,并返回删除成功的个数。
redis> SREM letters c d
(integer) 1
- 获得集合中的所有元素
SMEMBERS key
SMEMBERS命令会返回集合中的所有元素。
- 判断元素是否在集合中
SISMEMBER key member
判断一个元素是否在集合中是一个时间复杂度为O(1)的操作,当值存在时返回1,当值不存在或键不存在时返回0。
- 集合间运算
SDIFF key [key …]
SINTER key [key …]
SUNION key [key …]
1.SDIFF命令用来介绍多个集合执行差集运算。集合A与集合B的差集表示为A-B,代表所有属于A且不属于B的元素构成的集合。
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"
- SINTER 命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A ⋂ \bigcap ⋂B,代表所有属于A且属于B的元素构成的集合。
redis> SINTER setA setB
1) "2"
2) "3"
同样支持同时传入多个键。
- SUNION命令来对多个集合执行并集运算。集合A与集合B的并集表示A ⋃ \bigcup ⋃B。代表所有属于A或属于B的元素构成的集合。
redis> SUNION set A setB
1) "1"
2) "2"
3) "3"
4) "4"
SDIFF命令、SINTER命令、SUNION命令都支持同时传入多个键,会按照先后顺序依次计算。
3.5.4 命令拾遗
- 获得集合中元素个数
SCARD key
SCARD命令用来获得集合中元素个数
redis> SMEMBERS letters
1) "a"
2) "b"
redis> SCARD letters
(integer) 2
- 进行集合运算并将结果存储
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTROE destionation key [key …]
SDIFFSTORE 命令和SDIFF命令功能一样,唯一的区别就是前者不会之际返回运算结果,而是将结果存储再destination键中。
SDIFFSTORE命令常用于需要进行多步集合运算场景中,如需要计算差集再将结果和其他键计算交集。
SINTERSTROE和SUNIONSTORE命令与之类似
3.随机获得集合中的元素
SRANDMEMER key [count]
SRANDMEMBER 命令用来随机从集合中获取一个元素,还可以传递count参数来一次随机获得多个元素,根据count的正负不同,具体表现也不同。
-
当count为正数时,SRANDMEBER会随机从集合里获得count个不重复的元素。如果当count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。
-
当count为负数时,SRANDMEMBE会随机从集合里获得|count|个的元素,这些元素有可能相同。
-
从集合中弹出一个元素
SPOP key
SPOP命令会从集合中随机选择一个元素弹出。