2012-05-02 2 views

답변

8

데이터를 저장하는 방식을 변경하지 않고 결과를 저장하려면 SORT 명령을 사용할 수 있습니다. zset에 적용 할 수 있습니다. 예를 들어

: 당신은 값으로 정렬 할 수 있습니다

> zadd myset 1 albert 
> zadd myset 1 joseph 
> zadd myset 4 bertrand 
> zadd myset 2 casimir 
> zadd myset 3 alfred 

:

> sort myset alpha 
1) "albert" 
2) "alfred" 
3) "bertrand" 
4) "casimir" 
5) "joseph" 

당신은 점수와 값으로 정렬 할 수의 다음에 새 속성을 추가 할 수 있도록 지금

> zrange myset 0 -1 
1) "albert" 
2) "joseph" 
3) "casimir" 
4) "alfred" 
5) "bertrand" 

객체 :

> set order:albert 5 
> set order:alfred 3 
> set order:casimir 1 
> set order:joseph 4 
> set order:bertrand 2 
는 당신은 새로운 질서 속성으로 정렬 할 수 있습니다

: 당신이 점수를 기준으로 정렬해야하는 경우 지금

> sort myset by order:* 
1) "casimir" 
2) "bertrand" 
3) "alfred" 
4) "joseph" 
5) "albert" 

이 순서 속성은, 당신은 ZSET 순서 속성을 구체화 논리합을 실현보다 다른 선택의 여지가 order 속성의 점수. ZSET 순서 속성을 추가하는 예를 들어

, 우리가 얻을 :

> del myset 
> zadd myset 1 5:albert 
> zadd myset 1 4:joseph 
> zadd myset 4 2:bertrand 
> zadd myset 2 1:casimir 
> zadd myset 3 3:alfred 
> zrange myset 0 -1 
1) "4:joseph" 
2) "5:albert" 
3) "1:casimir" 
4) "3:alfred" 
5) "2:bertrand" 

주의 :이 경우, 속성 필드가 사전 식 순서에 따라 정렬됩니다, 값이 정상화 할 수 있도록 숫자 순서와 여러 자릿수가 필요한 경우 이를 위해 다양한 트릭이 있습니다. 예를 들어, "1", "12"또는 "123"을 저장하는 대신 숫자의 자릿수를 나타내는 첫 번째 숫자 인 "11", "212"또는 "3123"을 저장할 수 있습니다.

점수와 주문 속성이 모두 변경 될 수있는 경우 매우 편리하지 않으므로 클라이언트 측에서 정렬하여 더 효과적으로 제공 할 수 있습니다. 한쪽 점수로 zset을 검색하고 다른 쪽에서는 해당 주문 값을 검색하여 두 번의 라운드 트립에서 얻을 수 있습니다.

> zrange myset 0 -1 withscores 
> sort myset by order:* get order:* get # 

클라이언트가 두 가지 결과 (일종의 사전 또는 연관 배열 사용)를 결합하고 최종 결과를 얻기 위해 정렬합니다.