hset user:1 score 100
hset user:2 socre 101
hset user:3 score 200
hset user:4 score 201
要找出socre最高的user,应该如何设计。
天蓬老师2017-04-22 09:01:10
hset은 직접 정렬할 수 없습니다. hset 정렬과 동등한 결과를 얻기 위한 대안이 있는데, 이는 정렬 기능을 사용하는 것입니다. 정렬은 일반적으로 목록, 세트 및 zset만 정렬할 수 있지만 수정할 수 있습니다. 정렬은 다음과 같이 사용됩니다:
SORT 키 [BY 패턴] [LIMIT 오프셋 카운트] [GET 패턴 [GET 패턴 ...]] [ASC | DESC] [ALPHA] [STORE 대상]
by 및 store 매개변수에 주의하세요. by는 정렬 기준으로 사용할 필드를 결정하는 데 사용되며, store는 정렬 결과를 목록에 저장할 수 있습니다. 먼저 모든 해시 키를 세트에 저장할 수 있습니다. 예를 들어 이 세트의 키 이름은 myhashes입니다. 그런 다음 세트에 있는 각 요소(즉, 각 해시)의 점수 필드에 따라 정렬하고 마지막으로 정렬 결과를 저장할 수 있습니다. in 키 이름이 myresult인 목록에 있습니다. 여기서 정렬 결과는 물론 집합에 있는 모든 요소의 키 이름(즉, 모든 해시 키)입니다. GET 매개 변수에 #을 추가하면 집합에 있는 모든 요소의 키 이름을 얻을 수 있습니다. :
SORT myhashes BY *->점수 GET # STORE myresult
SORT는 BY 매개변수의 *를 myhashes의 각 값(즉, 각 해시 키 이름)으로 대체하고 -> 다음에 제공된 필드를 기반으로 해당 값을 얻은 다음 마지막으로 myhashes의 필드를 다음을 기반으로 비교합니다. 각 값은 정렬됩니다. 이러한 방식으로 myresult에는 점수에 따라 정렬된 해시 키 이름이 포함됩니다.
마지막으로 해시 디자인에 문제가 있는 것 같습니다. 해시는 여러 필드가 있는 SQL 데이터베이스의 행과 비슷하며 각 필드에는 해당 값이 있습니다. 점수 필드만 있는 경우 zset 사용을 고려해 보세요.
黄舟2017-04-22 09:01:10
해시를 정렬할 수 없습니다.
정렬이 필요한 경우 ZSET 연산, ZADD SCORES MEMBERS를 이용하세요
아이디어는 다음과 같습니다.
으아악다시 한번 말씀드리지만, HASH가 해시키를 저장하는 데에만 사용된다면 SCORES는 이런 방식으로 저장하지 않는 것이 좋습니다..