Redis 入门 四 集合类型

5 篇文章 0 订阅

3.5 集合类型

3.5.1 介绍

集合类型的常用操作是向集合中加入或删除元素,判断某个元素是否存在等,由于集合类型再Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1).

3.5.2 命令

  1. 增加/删除元素

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
  1. 获得集合中的所有元素

SMEMBERS key

SMEMBERS命令会返回集合中的所有元素。

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

SISMEMBER key member

判断一个元素是否在集合中是一个时间复杂度为O(1)的操作,当值存在时返回1,当值不存在或键不存在时返回0。

  1. 集合间运算

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"
  1. SINTER 命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A ⋂ \bigcap B,代表所有属于A且属于B的元素构成的集合。
redis> SINTER setA setB
1) "2"
2) "3"

同样支持同时传入多个键。

  1. 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 命令拾遗

  1. 获得集合中元素个数

SCARD key

SCARD命令用来获得集合中元素个数

redis> SMEMBERS letters
1) "a"
2) "b"
redis> SCARD letters
(integer) 2
  1. 进行集合运算并将结果存储

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的正负不同,具体表现也不同。

  1. 当count为正数时,SRANDMEBER会随机从集合里获得count个不重复的元素。如果当count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。

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

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

SPOP key

SPOP命令会从集合中随机选择一个元素弹出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值