Redis命令学习【3】之Set 型 Value 操作命令

文章详细介绍了Redis中Set和有序Set两种数据结构的操作命令,包括SADD、SMEMBERS、SCARD、SREM等Set命令,以及ZADD、ZRANGE、ZCARD等有序Set命令。Set主要用于无序、不重复元素的存储,而有序Set则提供了基于分值的排序功能,两者在动态黑白名单、有限随机数和用户画像等场景中有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

一 Set 型 Value 操作命令

1.1 概述

  • Redis 存储数据的 Value 可以是一个 Set 集合,且集合中的每一个元素均 String 类型。Set与 List 非常相似,但不同之处是 Set 中的元素具有无序性与不可重复性,而 List 则具有有序性与可重复性
  • Redis 中的 Set 集合与 Java 中的 Set 集合的实现相似,其底层都是 value 为 null 的 hash表。因此,才会拥有无序性与不可重复性。
命令解释
sadd将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
smembers返回集合 key 中的所有成员
scard返回 Set 集合的长度
sismember判断 member 元素是否集合 key 的成员
smovemember 元素从 source 集合移动到 destination 集合
srem移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,且返回成功移除的元素个数
srandmember返回集合中的 count 个随机元素。count 默认值为 1
spop移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1
sdiff / sdiffstore返回第一个集合与其它集合之间的差集。差集,difference
sinter / sinterstore返回多个集合间的交集(intersection)
sunion / sunionstore返回多个集合间的并集(union)

1.2 sadd

  • 格式:SADD key member [member ...]
  • 功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
  • 说明:假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。
    在这里插入图片描述

1.3 smembers

  • 格式:SMEMBERS key
  • 功能:返回集合 key 中的所有成员。
  • 说明:不存在的key 被视为空集合。若 key 中包含大量元素,则该命令可能会阻塞 Redis服务。所以生产环境中一般不使用该命令,而使用 sscan 命令代替。
    在这里插入图片描述

1.4 scard

  • 格式:SCARD key
  • 功能:返回 Set 集合的长度
  • 说明:当 key 不存在时,返回 0
    在这里插入图片描述

1.5 sismember

  • 格式:SISMEMBER key member
  • 功能:判断 member 元素是否集合 key 的成员。
  • 说明:如果 member 元素是集合的成员,返回 1 。如果 member 元素不是集合的成员,或 key 不存在,返回 0
    在这里插入图片描述

1.6 smove

  • 格式:SMOVE source destination member
  • 功能:将 member 元素从 source 集合移动到 destination 集合。
  • 说明:如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到destination 集合中去,返回 1。当 destination 集合已经包含 member 元素时, SMOVE命令只是简单地将 source 集合中的 member 元素删除。当 sourcedestination 不是集合类型时,返回一个错误。
    在这里插入图片描述

1.7 srem

  • 格式:SREM key member [member ...]
  • 功能:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,且返回成功移除的元素个数。
  • 说明:当 key 不是集合类型,返回一个错误。
    在这里插入图片描述

1.8 srandmember

  • 格式:SRANDMEMBER key [count]
  • 功能:返回集合中的 count 个随机元素。count 默认值为 1
  • 说明:若 count 为正数,且小于集合长度,那么返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合长度,那么返回整个集合。如果count 为负数,那么返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复。
    在这里插入图片描述

1.9 spop

  • 格式:SPOP key [count]
  • 功能:移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1
  • 说明:如果 count 大于等于集合长度,那么移除并返回整个集合。
    在这里插入图片描述

1.10 sdiff / sdiffstore

  • 格式:SDIFF key [key ...] 或 SDIFFSTORE destination key [key ...]
  • 功能:返回第一个集合与其它集合之间的差集。差集,difference
  • 说明:这两个命令的不同之处在于,sdiffstore 不仅能够显示差集,还能将差集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
    在这里插入图片描述

1.11 sinter / sinterstore

  • 格式:SINTER key [key ...] 或 SINTERSTORE destination key [key ...]
  • 功能:返回多个集合间的交集(intersection)。
  • 说明:这两个命令的不同之处在于,sinterstore 不仅能够显示交集,还能将交集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
    在这里插入图片描述

1.12 sunion / sunionstore

  • 格式:SUNION key [key ...] 或 SUNIONSTORE destination key [key ...]
  • 功能:返回多个集合间的并集(union)。
  • 说明:这两个命令的不同之处在于,sunionstore 不仅能够显示并集,还能将并集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
    在这里插入图片描述

1.13 应用场景

1.13.1 动态黑白名单

在这里插入图片描述

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

1.13.2 有限随机数

  • 有限随机数:返回的随机数是基于某一集合范围内的随机数。通过 spopsrandmember 可以实现从指定集合中随机选出元素。

1.13.3 用户画像

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

二 有序 Set 型 Value 操作命令

2.1 概述

  • Redis 存储数据的 Value 可以是一个有序 Set,这个有序 Set 中的每个元素均 String 类型。
  • 有序 Set 与 Set 的不同之处是,有序 Set 中的每一个元素都有一个分值 score,Redis 会根据score 的值对集合进行由小到大的排序。其与 Set 集合要求相同,元素不能重复,但元素的score 可以重复。由于该类型的所有命令均是字母 z 开头,所以该 Set 也称为 ZSet。
命令解释
zadd将一个或多个member 元素及其 score 值加入到有序集 key 中的适当位置
zrange 与 zrevrange返回有序集 key 中,指定区间内的成员。
zrangebyscore 与 zrevrangebyscore返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或max )的成员。
zcard返回集合的长度
zcount返回有序集 key 中,score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量。
zscore返回有序集 key 中,成员 memberscore 值。
zincrby为有序集 key 的成员 memberscore 值加上增量 increment
zrank 与 zrevrank返回有序集 key 中成员 member 的排名。zrank 命令会按 score 值递增排序,zrevrank 命令会按 score 递减排序。
zrem移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
zremrangebyrank移除有序集 key 中,指定排名(rank)区间内的所有成员。
zremrangebyscore移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或max )的成员。
zrangebylex该命令仅适用于集合中所有成员都具有相同分值的情况
zlexcount该命令仅适用于集合中所有成员都具有相同分值的情况
zremrangebylex该命令仅适用于集合中所有成员都具有相同分值的情况。

2.2 zadd

  • 格式:ZADD key score member [[score member] [score member] ...]
  • 功能:将一个或多个member 元素及其 score 值加入到有序集 key 中的适当位置。
  • 说明:score 值可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。如果命令执行成功,则返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。若写入的 member 值已经存在,但 score 值不同,则新的 score 值将覆盖老 score
    在这里插入图片描述

2.3 zrange 与 zrevrange

  • 格式:ZRANGE key start stop [WITHSCORES] 或 ZREVRANGE key start stop [WITHSCORES]
  • 功能:返回有序集 key 中,指定区间内的成员。zrange 命令会按 score 值递增排序,zrevrange命令会按score递减排序。具有相同 score 值的成员按字典序/逆字典序排列。可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回。
  • 说明:
    • 下标参数从 0 开始,即 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。也可以使用负数下标,-1 表示最后一个成员,-2 表示倒数第二个成员,以此类推。超出范围的下标并不会引起错误。
    • 如,当 start 的值比有序集的最大下标还要大,或是 start >stop 时,ZRANGE 命令只是简单地返回一个空列表。再比如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。若 key 中指定范围内包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中如果要查询有序集合中的所有元素,一般不使用该命令,而使用 zscan 命令代替。
      在这里插入图片描述
      在这里插入图片描述

2.4 zrangebyscore 与 zrevrangebyscore

  • 格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
  • 功能:返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或max )的成员。有序集成员按 score 值递增/递减次序排列。具有相同 score 值的成员按字典序/逆字典序排列。可选的 LIMIT 参数指定返回结果的数量及区间(就像 SQL 中的SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程效率可能会较低。可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。
  • 说明:min 和 max 的取值是正负无穷大的。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),也可以通过给参数前增加左括号“(”来使用可选的开区间 (小于或大于)。
    在这里插入图片描述
    在这里插入图片描述

2.5 zcard

  • 格式:ZCARD key
  • 功能:返回集合的长度
  • 说明:当 key 不存在时,返回 0 。
    在这里插入图片描述

2.6 zcount

  • 格式:ZCOUNT key min max
  • 功能:返回有序集 key 中,score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量。
    在这里插入图片描述

2.7 zscore

  • 格式:ZSCORE key member
  • 功能:返回有序集 key 中,成员 memberscore 值。
  • 说明:如果 member元素不是有序集 key 的成员,或 key 不存在,返回 nil
    在这里插入图片描述

2.8 zincrby

  • 格式:ZINCRBY key increment member
  • 功能:为有序集 key 的成员 memberscore 值加上增量 increment 。increment 值可以是整数值或双精度浮点数。
  • 说明:可以通过传递一个负数值 increment ,让 score 减去相应的值。当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。命令执行成功,则返回 member 成员的新 score 值。
    在这里插入图片描述

2.9 zrank 与 zrevrank

  • 格式:ZRANK key member 或 ZREVRANK key member
  • 功能:返回有序集 key 中成员 member 的排名。zrank 命令会按 score 值递增排序,zrevrank 命令会按 score 递减排序。
  • 说明:score 值最小的成员排名为0 。如果 member 不是有序集 key 的成员,返回 nil
    在这里插入图片描述

2.10 zrem

  • 格式:ZREM key member [member ...]
  • 功能:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
  • 说明:当 key 存在但不是有序集类型时,返回一个错误。执行成功,则返回被成功移除的成员的数量,不包括被忽略的成员。
    在这里插入图片描述

2.11 zremrangebyrank

  • 格式:ZREMRANGEBYRANK key start stop
  • 功能:移除有序集 key 中,指定排名(rank)区间内的所有成员。
  • 说明:排名区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。排名区间参数从 0 开始,即 0 表示排名第一的成员, 1 表示排名第二的成员,以此类推。也可以使用负数表示,-1 表示最后一个成员,-2 表示倒数第二个成员,以此类推。命令执行成功,则返回被移除成员的数量。
    在这里插入图片描述

2.12 zremrangebyscore

  • 格式:ZREMRANGEBYSCORE key min max
  • 功能:移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或max )的成员。
  • 说明:命令执行成功,则返回被移除成员的数量。
    在这里插入图片描述

2.13 zrangebylex

  • 格式:ZRANGEBYLEX key min max [LIMIT offset count]
  • 功能:该命令仅适用于集合中所有成员都具有相同分值的情况。当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序。即这个命令返回给定集合中元素值介于 min 和 max 之间的成员。如果有序集合里面的成员带有不同的分值, 那么命令的执行结果与 zrange key 效果相同。
  • 说明:合法的 min 和 max 参数必须包含左小括号“(”或左中括号“[”,其中左小括号“(”表示开区间, 而左中括号“[”则表示闭区间。min 或max 也可使用特殊字符“+”和“-”,分别表示正无穷大与负无穷大。
    在这里插入图片描述

2.14 zlexcount

  • 格式:ZLEXCOUNT key min max
  • 功能:该命令仅适用于集合中所有成员都具有相同分值的情况。该命令返回该集合中元素值本身(而非 score 值)介于 min 和 max 范围内的元素数量。
    在这里插入图片描述

2.15 zremrangebylex

  • 格式:ZREMRANGEBYLEX key min max
  • 功能:该命令仅适用于集合中所有成员都具有相同分值的情况。该命令会移除该集合中元素值本身介于 min 和 max 范围内的所有元素
    在这里插入图片描述

2.16 应用场景

  • 有序 Set 最为典型的应用场景就是排行榜,例如音乐、视频平台中根据播放量进行排序的排行榜;电商平台根据用户评价或销售量进行排序的排行榜等。将播放量作为 score,将作品 id 作为 member,将用户评价积分或销售量作为 score,将商家 id 作为 member。使用zincrby 增加排序 score,使用 zrevrange 获取 Top 前几名,使用 zrevrank 查询当前排名,使用zscore 查询当前排序 score 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值