2014-04-21 4 views
1

사용자가 점수와 전체 백분율로 저장되는 리더 보드가 필요합니다. 점수로 정렬하고 점수로 순위를 매길 수 있어야합니다.Redis 정렬 다중 점수 "열"로 집합 됨

은 레디 스 사용과 같이 점수 '는 사용자를 쉽게 저장할 수 있습니다 집합을 분류'를 : 그러나

ZADD leaderboard:gamemode1 100 user1 
ZADD leaderboard:gamemode1 300 user2 

, 내가 알아 내기 위해 struggelig 오전, 최고의 100300의 점수에 속하는 비율 값을 저장하는 방법 . :29.45gamemode1에서 100의 사용자 1의 점수에 대한 비율입니다

ZADD leaderboard:gamemode1 100 user1:29.45 

:

나는 이런 식으로 뭔가를해야합니까? 나는 이것이 나중에 gamemode1에 대한 user1의 점수를 업데이트하는 것을 복잡하게 만들 것이라고 생각합니다.

아니면 모든 게임 모드의 모든 사용자의 점수와 백분율을 저장하는 서적 유지 메커니즘으로 해시 테이블을 만들어야합니까?

해시 테이블 접근 방식에 대한 우려는 점수와 백분율 값을 가진 ~ 50 명의 사용자의 리더 보드를 표시하려는 경우 상위 50 개를 가져온 후 백분율을 얻기 위해 해시 테이블을 50 회 쿼리해야합니다. 점수는 ZRANGE입니다.

아무도 좋은 방법으로 이것을 구성하는 방법에 대한 의견이 있습니까?

답변

5

Sorted Sets으로 작업 할 때 멤버 문자열 유니티가 있음을 유의하십시오.

의미 :

ZADD game1 100 user1 
ZADD game1 90 user1 

90 user1 당신을 남긴다.

그냥 헤드 업이라고 생각합니다. 위

ZADD leaderboard:gamemode1 100.0995 user1 
ZADD leaderboard:gamemode1 90.0850 user2 

, 나는이 같은 비율의 소수 부분을 사용합니다 : 0.0995 = 99.5 %

비율을 저장하기 위해, 당신은 점수의 소수 부분을 사용할 수 있습니다. 당신이 JSON 또는 MsgPack를 사용하는 경우, 당신은 항상 직렬화 된 문자열 내에서 일부 데이터를 업데이트하는 서버 측 스크립트를 사용할 수

ZADD leaderboard:gamemode1 100 [serialized dictionary/dataset] 
ZADD leaderboard:gamemode1 90 [serialized dictionary/dataset] 

:

또한에만 점수의 점수를 사용하고, 회원 문자열을 직렬화 할 수 있습니다 .

적어도이 단계에서는이 간단한 시나리오에 대해서는 부기를 권하지 않습니다. 필요한 경우 언제든지 구현할 수 있습니다.

희망 하시겠습니까? TW