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的主要内容,如果未能解决你的问题,请参考以下文章

StackExchange.Redis 之 Set集合 类型示例

redis(十二):Redis 集合(Set)

redis(十二):Redis 集合(Set)

Redis 集合(Set)

Redis 集合(Set)

Redis之Set 集合