redis集合-set
Posted zhuruichao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集合-set相关的知识,希望对你有一定的参考价值。
特点:无序性、确定性、唯一性
常用命令:
1. sadd key member [member...]:
将一个或多个 member
元素加入到集合 key
当中,已经存在于集合的 member
元素将被忽略。
假如 key
不存在,则创建一个只包含 member
元素作成员的集合。
当 key
不是集合类型时,返回一个错误。
2. sismember key member:判断 member
元素是否集合 key
的成员。
返回值:如果 member
元素是集合的成员,返回 1
。 如果 member
元素不是集合的成员,或 key
不存在,返回 0
。
3. spop key:移除并返回集合中的一个随机元素。
4. srandmember key [count]:
如果命令执行时,只提供了 key
参数,那么返回集合中的一个随机元素。
从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count
参数:
-
如果
count
为正数,且小于集合基数,那么命令返回一个包含count
个元素的数组,数组中的元素各不相同。如果count
大于等于集合基数,那么返回整个集合。 -
如果
count
为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count
的绝对值。
该操作和 SPOP key 相似,但 SPOP key 将随机元素从集合中移除并返回,而 SRANDMEMBER 则仅仅返回随机元素,而不对集合进行任何改动。
5. srem key member [member...]:
移除集合 key
中的一个或多个 member
元素,不存在的 member
元素会被忽略。
当 key
不是集合类型,返回一个错误。
6. smove source destination memeber:将 member
元素从 source
集合移动到 destination
集合。
SMOVE 是原子性操作。
如果 source
集合不存在或不包含指定的 member
元素,则 SMOVE 命令不执行任何操作,仅返回 0
。
否则, member
元素从 source
集合中被移除,并添加到 destination
集合中去。
当 destination
集合已经包含 member
元素时, SMOVE 命令只是简单地将 source
集合中的 member
元素删除。
当 source
或 destination
不是集合类型时,返回一个错误。
7. scard key:返回集合 key
的基数(集合中元素的数量)。
8. smembers key: 返回集合 key
中的所有成员。不存在的 key
被视为空集合。
9.sinter key [key...]:
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 key
被视为空集。
当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
10. sinterstore destination key [key...]:
这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
集合已经存在,则将其覆盖。
destination
可以是 key
本身。
11. sunion key [key...]:
返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的 key
被视为空集。
12. sunionstore destination key [key...]:
这个命令类似于 SUNION key [key …] 命令,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
已经存在,则将其覆盖。
destination
可以是 key
本身。
13. sdiff key [key...]:
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的 key
被视为空集。
14. sdiffstore destination key [key..]:
这个命令的作用和 SDIFF key [key …] 类似,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
集合已经存在,则将其覆盖。
destination
可以是 key
本身。
应用场景:
1. 抽奖 随机获取元素 spop myset
2. 点赞、签到、打卡
例如:微博点赞
微博的 ID 是 t1001,用户 ID 是 u3001。
用 like:t1001 来维护 t1001 这条微博的所有点赞用户。
点赞了这条微博:sadd like:t1001 u3001
取消点赞:srem like:t1001 u3001
是否点赞:sismember like:t1001 u3001
点赞的所有用户:smembers like:t1001
点赞数:scard like:t1001
比关系型数据库简单许多。
3. 商品标签:
4.商品筛选
获取差集
sdiff set1 set2
获取交集( intersection )
sinter set1 set2
获取并集
sunion set1 set2
5.用户关注、模型推荐
以上是关于redis集合-set的主要内容,如果未能解决你的问题,请参考以下文章