gpt4 book ai didi

redis - 如何在排序集上获得 DIFF

转载 作者:IT王子 更新时间:2023-10-29 05:56:30 27 4
gpt4 key购买 nike

如何从有序集合中获取权重最大的元素,但不包括在另一个集合(或列表或散列)中找到的元素。

>zadd all 1 one
>zadd all 2 two
>zadd all 3 three
>sadd disabled 2
>sdiff all disabled

(error) WRONGTYPE Operation against a key holding the wrong kind of value

我唯一的选择是从排序集中逐个获取元素并与“禁用”项目列表进行比较吗?由于服务器的事务太多,那不会很慢吗?

这里的方法是什么?

最佳答案

注意:我假设你的意思是sadd disabled two

如您所知,SDIFF 不对排序集进行操作 - 这是因为定义排序集之间的差异并非易事。

您可以做的是首先使用 ZUNIONSTORE 创建一个临时集并将相交的分数设置为 0。然后做一个不包括 0 的范围,例如:

127.0.0.1:6379> ZADD all 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> SADD disabled two
(integer) 1
127.0.0.1:6379> ZUNIONSTORE tmp 2 all disabled WEIGHTS 1 0 AGGREGATE MIN
(integer) 3
127.0.0.1:6379> ZREVRANGEBYSCORE tmp +inf 1 WITHSCORES
1) "three"
2) "3"
3) "one"
4) "1"

关于redis - 如何在排序集上获得 DIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26698179/

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