복붙노트

[REDIS] 소트 세트에 DIFF를 얻는 방법

REDIS

소트 세트에 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

내 유일한 옵션은 소트 세트 하나씩에서 요소를 얻을 "장애인"항목 목록에 비교하는 것이다인가? 하지 않을까요 매우 느린 때문에 서버에 많은 트랜잭션 그래서?

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

해결법

  1. ==============================

    1.참고 : 나는 당신을 가정 두 장애인 사드 의미 한

    참고 : 나는 당신을 가정 두 장애인 사드 의미 한

    정렬 된 세트 사이의 차이를 정의하는 것은 사소한하지 않기 때문에 - 당신이 발견 한 것처럼, 아니면 sdiff는 정렬 된 세트에서 작동하지 않습니다.

    먼저 다음 범위 예컨대, 0을 제외 할 ZUNIONSTORE와 임시 세트를 만들고 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"
    
  2. from https://stackoverflow.com/questions/26698179/how-to-get-diff-on-sorted-set by cc-by-sa and MIT license