redis-集合

集合

Redis的集合以无序的方式存储多个各不相同的元素。用户可以快速地向集合添加元素,或者从集合里面删除元素,也可以对多个集合进行集合运算操作,比如计算并集、交集和差集。

一、元素操作

1.添加元素

SADD key element [element...]

将一个或多个元素添加到给定的集合里面,已经存在于集合的元素会自动忽略,命令返回新添加到集合的元素的数量。

命令复杂度为O(N),N为成功添加的元素数量。

2.移除元素

SREM key element [element..]

移除集合中的一个或多个元素,不存在于集合中的元素会被自动忽略,命令返回存在并且被移除的元素数量。

命令复杂度为O(N),N为被移除元素的数量。

3.检查给定元素是否存在于集合

SISMEMBER key element

检查给定的元素是否存在于集合,存在的话返回1;如果元素不存在,或者给定的键不存在,那么返回0。

命令复杂度为O(1)。

4.返回集合的大小

SCARD key

返回集合包含的元素数量(也即是集合的基数)。因为Redis会存储集合的长度,所以命令的复杂度为O(1)。

5.返回集合包含的所有元素

SMEMBERS key

返回集合包含的所有元素,N为集合的大小。当集合的基数比较大时,执行这个命令有可能造成服务器阻塞。

6.集合的无序性质

对于相同的集合元素,同一个集合命令可能会返回不同的结果。

注意:不要使用集合来存储有序的数据如果要想存储有序且重复的值,可以使用列表;如果想要存储有序且无重复的值,可以使用之后介绍的有序集合。

7.应用:点赞、喜欢、投票等功能。

8.从集合里面随机弹出一个元素

SPOP key

随机地从集合中移除并返回一个元素,复杂度为O(1)。

9.从集合里面随机地返回元素

SRANDMEMBER key [count]

如果没有给定可选的count参数,那么命令随机地返回集合中的一个元素。如果给定了count参数,那么:当count为正数,并且小雨集合基数时,命令返回一个包含count个参数的数组,数组中的每个元素各不相同。如果count大于或等于集合基数,那么命令返回整个集合。当count为负数时,命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。和SPOP不同的是,SRANDMEMBER不会移除被返回的元素。命令复杂度为O(N),N为被返回元素的数量。可以用于实现随机抽奖。

二、集合运算操作

1.差集运算

命令作用复杂度
SDIFF key [key...]计算所有给定集合的差集,并返回结果。O(N),N为所有参与差集计算的元素数量之和
SDIFFSTORE destkey key [key...]计算所有给定集合的差集,并将结果存储到destkey。O(N),N为所有参与差集计算的元素数量之和。

2.交集运算

命令作用复杂度
SINTER key [key...]计算所有给定集合的交集,并返回结果。O(N),N为所有参与差集计算的元素数量之和
SINTERSTORE destkey key [key...]计算所有给定集合的交集,并将结果存储到destkey。O(N),N为所有参与差集计算的元素数量之和。

3.并集运算

命令作用复杂度
SUNION key [key...]计算所有给定集合的并集,并返回结果。O(N),N为所有参与差集计算的元素数量之和
SUNIONSTORE destkey key [key...]计算所有给定集合的并集,并将结果存储到destkey。O(N),N为所有参与差集计算的元素数量之和。

 

集合运算使用场景:比如微博的共同关注功能,商品筛选功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值