Redis---集合

标签:Redis首次发布:2023-11-11最近修改:2026-08-15

集合概述

  • Redis 存储数据的 Value 可以是一个 Set 集合,且集合中的每一个元素均 String 类型。Set 与 List 非常相似,但不同之处是 Set 中的元素具有无序性与不可重复性,而 List 则具有有序性与可重复性。

  • 集合对象的编码可以是 intset 或者 hashtable。

  • 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储 40 多亿个成员)。

命令

sadd

  • 格式:sadd key member [member …]
  • 功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
  • 说明:假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。
bash
127.0.0.1:6379> sadd team AG TTG DYG(integer) 3127.0.0.1:6379> smembers team1) "AG"2) "TTG"3) "DYG"

smembers

  • 格式:smembers key
  • 功能:返回集合 key 中的所有成员。
  • 说明:不存在的 key 被视为空集合。若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般不使用该命令,而使用 sscan 命令代替。
bash
127.0.0.1:6379> sscan team 0 count 31) "0"2) 1) "AG"   2) "TTG"   3) "DYG"

scard

  • 格式:scard key

  • 功能:返回 Set 集合的长度

  • 说明:当 key 不存在时,返回 0 。

bash
127.0.0.1:6379> scard team(integer) 3

sismember

  • 格式:sismember key member
  • 功能:判断 member 元素是否集合 key 的成员。
  • 说明:如果 member 元素是集合的成员,返回 1 。如果 member 元素不是集合的成员,或 key 不存在,返回 0 。
bash
127.0.0.1:6379> sismember team DYG(integer) 1127.0.0.1:6379> sismember team ES (integer) 0

smove

  • 格式:smove source destination member
  • 功能:将 member 元素从 source 集合移动到 destination 集合。
  • 说明:如果 source 集合不存在或不包含指定的 member 元素,则 smove 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去,返回 1。当 destination 集合已经包含 member 元素时, smove 命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时,返回一个错误。
bash
127.0.0.1:6379> sadd Sour a b c(integer) 3127.0.0.1:6379> sadd Dest d e(integer) 2127.0.0.1:6379> smove Sour Dest c(integer) 1127.0.0.1:6379> smembers Dest1) "d"2) "e"3) "c"127.0.0.1:6379> smembers Sour1) "a"2) "b"

srem

  • 格式:srem key member [member …]
  • 功能:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,且返回成功移除的元素个数。
  • 说明:当 key 不是集合类型,返回一个错误。
bash
127.0.0.1:6379> srem team DYG TTG(integer) 2127.0.0.1:6379> smembers team1) "AG"

srandmember

  • 格式:srandmember key [count]
  • 功能:返回集合中的 count 个随机元素。count 默认值为 1。
  • 说明:若 count 为正数,且小于集合长度,那么返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合长度,那么返回整个集合。如果 count 为负数,那么返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复。
bash
127.0.0.1:6379> srandmember Dest -31) "d"2) "e"3) "c"127.0.0.1:6379> srandmember Dest 21) "d"2) "e"127.0.0.1:6379> srandmember Dest -31) "c"2) "d"3) "c"127.0.0.1:6379> srandmember Dest 21) "e"2) "c"

spop

  • 格式:spop key [count]
  • 功能:移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1。
  • 说明:如果 count 大于等于集合长度,那么移除并返回整个集合。
bash
127.0.0.1:6379> spop Dest 21) "d"2) "e"127.0.0.1:6379> smembers Dest1) "c"

sdiff 与 sdiffstore

  • 格式:sdiff key [key …] 或 sdiffstore destination key [key …]
  • 功能:返回第一个集合与其它集合之间的差集。差集,difference。
  • 说明:这两个命令的不同之处在于,sdiffstore 不仅能够显示差集,还能将差集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
bash
127.0.0.1:6379> sadd X a b c d e(integer) 5127.0.0.1:6379> sadd Y d e f g h(integer) 5127.0.0.1:6379> sdiff X Y1) "a"2) "b"3) "c"127.0.0.1:6379> sdiff Y X1) "f"2) "g"3) "h"127.0.0.1:6379> sdiffstore XdY X Y(integer) 3127.0.0.1:6379> smembers XdY1) "a"2) "b"3) "c"

sinter 与 sinterstore

  • 格式:sinter key [key …] 或 sinterstore destination key [key …]
  • 功能:返回多个集合间的交集。交集,intersection。
  • 说明:这两个命令的不同之处在于,sinterstore 不仅能够显示交集,还能将交集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
bash
127.0.0.1:6379> sinter X Y1) "d"2) "e"127.0.0.1:6379> sinterstore XiY X Y(integer) 2127.0.0.1:6379> smembers XiY1) "d"2) "e"

sunion 与 sunionstore

  • 格式:sunion key [key …] 或 sunionstore destination key [key …]
  • 功能:返回多个集合间的并集。并集,union。
  • 说明:这两个命令的不同之处在于,sunionstore 不仅能够显示并集,还能将并集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
bash
127.0.0.1:6379> sunion X Y1) "a"2) "b"3) "c"4) "d"5) "e"6) "f"7) "g"8) "h"127.0.0.1:6379> sunionstore XuY X Y(integer) 8127.0.0.1:6379> smembers XuY1) "a"2) "b"3) "c"4) "d"5) "e"6) "f"7) "g"8) "h"

应用场景

  1. 动态黑白名单
    例如某服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入 Redis,只要有客户端来访问服务器,服务器在获取到客户端 IP 后,先从 Redis 的黑名单中查看是否存在该 IP,如果存在,则拒绝访问,否则访问通过。

  2. 有限随机数
    有限随机数是指返回的随机数是基于某一集合范围内的随机数,例如抽奖、随机选人。通过 spop 或 srandmember 可以实现从指定集合中随机选出元素。

  3. 用户画像
    社交平台、电商平台等各种需要用户注册登录的平台,会根据用户提供的资料与用户使用习惯,为每个用户进行画像,即为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用 sadd 添加到该用户对应的集合中。这些标签具有无序、不重复特征。同时平台还可以使用 sinter/sinterstore 根据用户画像间的交集进行好友推荐、商品推荐、客户推荐等。

Comments

评论区将在滚动到这里时加载。