2016-06-01 7 views
1

점수가있는 목록을 정렬 된 집합으로 정렬하고 싶습니다. 나는 또한 한계 명령을 사용하고 싶다.점수가 정렬 된 목록을 정렬하는 방법

다음과 같이 목록 및 정렬 된 집합을 만들었습니다.

zadd weights 10 apple 20 grape 30 banana 40 strawberry 50 melon 
lpush list apple melon strawberry banana 

나는 sort 명령을 사용하여 다음과 같이 시도했습니다.

sort list by weights limit 2 2 
sort list by weights->* limit 2 2 

나는 그 목록이 "사과 바나나 딸기 멜론"주문으로 정렬되었고 "딸기 멜론"만이 limit 명령으로 반환 될 것으로 예상했습니다. 위의 두 명령은 작동하지 않습니다. (대신 알파벳순으로 정렬 된 문자가 있습니다)

내가 예상 한 결과를 얻으려면 어떻게해야합니까?

감사합니다.

답변

0

그런 식으로는 Redis가 작동하지 않습니다. 문서에 따르면 정렬 방식은 외부 키의 값이 아니라 외부 키를 기준으로 정렬하는 데 사용됩니다. 보다 정확하게 말하면, Redis가 sort list by weights_*을 수행 할 때이 패턴을 계산하는 모든 키를 확인한 다음 목록의 값과 비교하여 정렬 된 결과를 반환합니다.

예 : 정렬하려고하면 정렬이 weight_ * 패턴에 외부 키에 적용 당신이 볼 수 있듯이 이제

lpush list apple melon strawberry banana 
MSET weights_apple 10 weights_grape 20 weights_banana 30 weights_strawberry 40 weights_melon 50 

, 결과는

127.0.0.1:6379> sort list by weight_* 
1) "apple" 
2) "banana" 
3) "strawberry" 
4) "melon" 

될 것입니다. 단일 엔터티 (해시 또는 정렬 된 집합 내)가 아님

해시 맵 또는 정렬 된 집합을 사용하여 동일하게 수행 할 수 있지만 특정 패턴과 일치하는 키와 해당 키의 값과 비교할 때 비교가 발생합니다. 예를 들어, 해시 맵 또는 정렬 된 세트로 동일하게하려면 이와 같이해야합니다.

127.0.0.1:6379> lpush list apple melon strawberry banana 
(integer) 4 
127.0.0.1:6379> hset weight_apple value 10 
(integer) 1 
127.0.0.1:6379> hset weight_grape value 20 
(integer) 1 
127.0.0.1:6379> hset weight_banana value 30 
(integer) 1 
127.0.0.1:6379> hset weight_strawberry value 40 
(integer) 1 
127.0.0.1:6379> hset weight_melon value 50 
(integer) 1 
127.0.0.1:6379> sort list by weights_*->weight 
1) "apple" 
2) "banana" 
3) "melon" 
4) "strawberry" 

당신은 모든 정보의 게이머의 단일 해시와 게이머의 ID가 포함 된 세트를 저장과 같은 데이터 구조가있는 경우이 잘 작동합니다. 이제 점수에 따라 분류하고 싶습니다.

get 명령을 사용하여 다른 연관된 값을 가져올 수도 있습니다.

관련 문제