redis可以对key排序吗
高洛峰
高洛峰 2017-04-22 08:59:10
0
4
873

hset user:1 score 100

hset user:2 socre 101

hset user:3 score 200

hset user:4 score 201

要找出socre最高的user,应该如何设计。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(4)
Peter_Zhu

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 사용을 고려해 보세요.

黄舟

HashSet직접 예약은 불가능합니다. 사용자 ID와 해당 점수만 저장하는 별도의 SortedSet을 유지해야 합니다.

PHPzhong

그런 뜻인지는 모르겠습니다
코드를 업로드하세요

으아악

문서
http://redis.cn/commands/sort.html

黄舟

해시를 정렬할 수 없습니다.

정렬이 필요한 경우 ZSET 연산, ZADD SCORES MEMBERS를 이용하세요

아이디어는 다음과 같습니다.

으아악

다시 한번 말씀드리지만, HASH가 해시키를 저장하는 데에만 사용된다면 SCORES는 이런 방식으로 저장하지 않는 것이 좋습니다..

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿