2014-11-02 2 views
5

정렬 된 집합에서 가중치가 많은 요소를 가져 오지 만 다른 집합 (또는 목록 또는 해시)에서 발견 된 요소는 제외합니다.정렬 된 집합에서 DIFF를 얻는 방법

>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 

내 유일한 옵션은 정렬 된 집합에서 요소를 하나씩 가져 와서 "사용하지 않는"항목 목록과 비교하는 것입니까? 서버와의 트랜잭션이 너무 많아서 그렇게 느리지 않습니까?

여기에 접근 방법은 무엇입니까?

답변

17

참고 : - 정렬 된 세트 사이의 차이를 정의하는 것은 사소한되지 않기 때문에 즉 당신이, SDIFF 정렬 된 세트에서 작동하지 않습니다 발견했습니다 당신이

sadd disabled two을 의미 한 가정합니다.

그런 다음, 예컨대 :

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" 
+1

쿨 트릭, 이타 마르를 0을 제외한 범위을 가장 먼저 ZUNIONSTORE와 임시 세트를 만들고 0으로 교차의 점수를 설정 할 수 있습니다! – djanowski

+0

@djanowski 감사합니다 :) # 2021에서 다시 만나기를 바란다! –

관련 문제