2013-04-02 5 views
1

Redis is awesome!Redis 정렬 된 조합 조합

I 같은 2 개 정렬 된 세트가있는 경우 - "SET1 = KEY1 : 300 (100), 키 2 : 200, KEY3"등

다른 "SET2 = KEY1 : 1, 키 2 : 2, KEY3 : 3"

다음이 가능 이런 식으로 얻을 수 있습니다 - SET3 = 키 1 : 100_1, 키 2 : 200_2 2, 키를 : 300_3

나는 같은 키의 값을 추가하거나 동일한 키의 최소/최대 먹고 싶어하지 않습니다. 이 값들을 함께 얻을 수 있습니까? 동일한 키에 대해이 두 값을 함께 가져 오려고합니다.

답변

1

정렬 된 집합의 점수는 숫자 값이어야하므로 교차/합집합 작업에서 점수의 간단한 연결을 반환 할 수 없습니다.

그러나 각 세트의 점수 값을 주어진 범위로 제한 할 수있는 경우 SUM 연산을 사용하여 단일 값으로 두 값을 간단한 산술로 인코딩 할 수 있습니다.

예 : 최종 점수에서

# For s1, we assume the score is between 0 and 999 
> zadd s1 100 key1 200 key2 300 key3 
(integer) 3 
# For s2, we assume the score is between 0 and 99 
> zadd s2 1 key1 2 key2 3 key3 
(integer) 3 

# Get the intersection, dividing the s2 score by 100 
> zinterstore s3 2 s1 s2 WEIGHTS 1 0.01 
(integer) 3 

# Get the result with scores 
> zrange s3 0 -1 withscores 
1) "key1" 
2) "100.01000000000001" 
3) "key2" 
4) "200.02000000000001" 
5) "key3" 
6) "300.02999999999997" 

는, 정수 부분은 S1에서 나오는 점수를 포함, 소수 부분은 S2에서 나오는 점수가 포함되어 있습니다.

점수는 이중 부동 소수점 숫자입니다.

  • 당신은 정수를 조작 할 경우 제대로 반올림 할 수 있습니다 (즉 0.0299999 ... 실제로는 0.03이다)

  • 인코딩 하나에 두 개의 숫자 값은 정밀도 분할을 의미합니다 : 그것은 어떤 결과가 2 씩 (16 자리에서 8 자리까지). 귀하의 필요에 부응 할 수도 있고 그렇지 않을 수도 있습니다.