gpt4 book ai didi

redis zinterstore 问题

转载 作者:IT王子 更新时间:2023-10-29 06:03:11 26 4
gpt4 key购买 nike

我向排序集中添加了六个数据。然后我使用 zinterstore 来获得预期的结果。但结果为 0。

zadd la.41 41 kfc
zadd la.42 42 mdl
zadd la.43 43 apple

zadd lo.77 77 apple
zadd lo.78 78 mdl
zadd lo.79 79 kfc

zinterstore close 6 la.41 la.42 la.43 lo.77 lo.78 lo.79

预期结果:

kfc
mdl
apple

实际结果:

0

为什么?谢谢。

最佳答案

看起来您要么误解了 ZADD 并创建了比您想要的更多的集合,要么您在应该使用并集的时候使用了交集。让我们看看两者:

创建更少的集合

一个潜在的问题是您正在创建六个集合,而您可能想要创建两个集合。在集合表示法中,您这样做:

la.41 = {kfc}
la.42 = {mdl}
la.43 = {apple}

什么时候你可能想这样做:

la = {kfc, mdl, apple}

如果这是你打算做的,那么你误解了 ZADD命令。

ZADD 需要一个键、一个分数和一个成员。您可以将键视为集合的名称,将成员视为您要添加到集合中的事物,并将得分视为成员在集合中的位置。

例如,如果我运行命令 ZADD foo 1 a,那么我创建了一个名为 foo 的集合,其中的成员 a1 的分数。暂时忽略分数,现在的情况是这样的:

foo = {a}

如果我现在运行 ZADD foo 2 b,那么我已经将成员 b 添加到现有集合 foo:

foo = {a, b}

您在每个 ZADD 命令中使用了不同的 key ,因此您正在为每个命令创建一个新的集合。如果您使用相同的 key ,因此使用相同的集合:

ZADD la 41 kfc
ZADD la 42 mdl

您最终将创建一个集合:

la = {kfc, mdl}

并集与交集

替代方案是您确实想要创建六个集合,但您想要并集而不是交集。

两个集合的联合是一个集合,其中包含存在于任一原始集合中的所有元素:

{1, 2} ∪ {2, 3} = {1, 2, 3}

两个集合的交集是包含两个原始集合中存在的所有元素的集合:

{1, 2} ∩ {2, 3} = {2}

您正在创建六个集合,它们没有共同的元素,然后取它们的交集:

{kfc} ∩ {mdl} ∩ {apple} ∩ {kfc} ∩ {mdl} ∩ {apple} = {}

如果您采用并集,您最终会得到结果集中的所有元素:

{kfc} ∪ {mdl} ∪ {apple} ∪ {kfc} ∪ {mdl} ∪ {apple} = {kfc, mdl, apple}

您可以使用 ZUNIONSTORE 来实现此目的Redis 命令而不是 ZINTERSTORE .

关于redis zinterstore 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10748887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com