gpt4 book ai didi

redis - 不完整的相交redis集

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

我有一些数据想存储在 redis 中以便能够有效地对其进行交叉。示例数据:

 key |  members
---------------------------------
101 | "a1", "a2", "a3"
102 | "a2", "a3"
103 | "a2", "a4"

所以,这些键的交集会给我

SINTER 101 102 103
1) "a2"

但是,当数据集不完整时,我遇到了一些问题:

 key |  members
---------------------------------
101 | "a1", "a2", "a3"
102 | "a2", "a3"
103 | "a4", "a5"

在这种情况下,获取相同三个键的交集会得到一个空集:

SINTER 101 102 103
(empty list or set)

我的目标是获得匹配最多集合的成员。在redis中有没有办法实现这一目标?如果有帮助,我可以改变我的数据集的存储方式。 IE。创建集合的逆版本(成员作为键,键作为成员)

此外,使用可能更适合此任务的其他 key 存储而不是 redis 是否有意义?

最佳答案

您可以使用 AGGREGATE SUM 参数对已排序的集合执行并集运算。它有点笨拙,但它会起作用。基本上将所有得分为1的元素相加,然后通过将得分相加来并集。

结果集将从交点最多的元素到交点最少的元素排序:

127.0.0.1:6379> zadd foo 1 a
(integer) 1
127.0.0.1:6379> zadd foo 1 b
(integer) 1
127.0.0.1:6379> zadd foo 1 c
(integer) 1

127.0.0.1:6379> zadd bar 1 a
(integer) 1
127.0.0.1:6379> zadd bar 1 c
(integer) 1

127.0.0.1:6379> zadd baz 1 d
(integer) 1

# Now let's do the union and store it into "merged"
127.0.0.1:6379> ZUNIONSTORE merged 3 foo bar baz AGGREGATE SUM
(integer) 4

# Merged is now sorted by common points
127.0.0.1:6379> ZREVRANGE merged 0 -1 WITHSCORES
1) "c"
2) "2"
3) "a"
4) "2"
5) "d"
6) "1"
7) "b"
8) "1"
127.0.0.1:6379>

关于redis - 不完整的相交redis集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178574/

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