ZUNIONSTORE

将多个已有序集合合的并集存储在一个键中。

语法

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE ]

引入版本:2.0.0

复杂度摘要:O(N)

[!NOTE] 此命令的行为在集群 Redis 环境中有所不同。请参阅 多键操作 页面了解更多信息。

计算由指定键给出的 numkeys 有序集合的并集,并将结果存储在 destination 中。在传递输入键和其他(可选)参数之前,必须提供输入键的数量 (numkeys)。

默认情况下,元素的结果分数是其所在有序集合中的分数之和。

使用 WEIGHTS 选项,可以为每个输入有序集合指定乘法因子。在聚合之前,每个元素的分数乘以相应的权重。当未给出 WEIGHTS 时,乘法因子默认为 1。

使用 AGGREGATE 选项,可以指定如何聚合联合结果。此选项默认为 SUM,其中元素的分数在其存在的输入中求和。当此选项设置为 MIN 或 MAX 时,结果集将包含元素存在的输入中的最小或最大分数。对于 SUM、MIN 和 MAX,每个元素的分数在聚合之前会乘以其相应的权重。

当指定AGGREGATE COUNT 时,原始元素分数将被完全忽略。每个元素的结果分数由包含该元素的输入集决定,可以选择按 WEIGHTS 缩放:

  • 如果没有 WEIGHTS,包含该元素的每个输入集都会将 1 贡献给其分数 — 有效地计算集成员资格。
  • 使用 WEIGHTS,包含该元素的每个输入集贡献其相应的权重,因此分数成为这些权重的总和。

这实现了一个常见的用例:直接在命令级别计算集合成员资格频率,无需应用程序端解决方法。

如果 destination 已存在,则将其覆盖。

必需参数

destination

存储结果有序集合的键。

numkeys

后面的键的数量。

key [key ...]

一个或多个要并集的有序集合键。

可选参数

WEIGHTS weight [weight ...]

每个输入集的乘法因子;在聚合之前,每组的分数乘以其权重。每组默认为 1。

AGGREGATE SUM | MIN | MAX | COUNT

如何合并多个集合中存在的成员的分数:SUM(默认)、MIN、MAX 或 COUNT。

示例

redis> ZADD zset1 1 "one"
(integer) 1
redis> ZADD zset1 2 "two"
(integer) 1
redis> ZADD zset2 1 "one"
(integer) 1
redis> ZADD zset2 2 "two"
(integer) 1
redis> ZADD zset2 3 "three"
(integer) 1
redis> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 3
redis> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

整数回复:结果有序集合中的元素数量。

RESP3

整数回复:结果有序集合中的元素数量。

资料来源:Redis 官方 ZUNIONSTORE 文档;中文内容参考 Redis 文档许可。