如何从排序集中获取大多数加权元素,但不包括在另一个集合(或列表或散列)中找到的元素.
>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
Run Code Online (Sandbox Code Playgroud)
我唯一的选择是从排序集中逐个获取元素并与"禁用"项列表进行比较吗?由于对服务器的这么多交易,这不是很慢吗?
这是什么方法?
Ita*_*ber 25
注意:我认为你的意思是 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"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2491 次 |
最近记录: |