Реализация плотного ранжирования с помощью отсортированных наборов Redis

Я пытаюсь реализовать таблицу лидеров с рейтингом, данные хранятся в виде отсортированных наборов в Redis. Часть, которую я пытаюсь понять, это как реализовать Dense (т.е. "1-2-2-3") ранжирование, где, например, пользователи ранжируются следующим образом:

Score   User    Rank
---------------------
22      user1   1
21      user2   2
21      user3   2
21      user4   2
20      user5   3
20      user6   3

Этот ответ: https://stackoverflow.com/a/14944280/2177 - это почти то, что мне нужно, но это равнозначно "1-2-2-4", который нежелательно для моего приложения, например:

1-2-2-4 Ranking 
Score   User    Rank
---------------------
22     user1    1
21     user2    2
21     user3    2
21     user4    2
20     user5    5
20     user6    5

Похоже, это будет довольно распространенный вариант использования. Кто-нибудь успешно реализовал такую ​​вещь в Redis, и если да, то как?


person yalestar    schedule 07.10.2013    source источник
comment
Для этого уже доступны библиотеки, респект разработчикам! github.com/agoragames/leaderboard-python github.com/agoragames/leaderboard-python#ports Спасибо рецензентам!   -  person Babu    schedule 17.05.2018


Ответы (1)


В итоге я добавил второй отсортированный набор, содержащий только уникальные баллы, которые я затем могу запросить для их соответствующих позиций в плотном рейтинге.

person yalestar    schedule 09.10.2013
comment
Как вы это реализовали? Набор уникальных оценок будет иметь значения [22, 21, 20], что означает, что ранг уникальной оценки 20 равен 3, но вам нужно, чтобы он был равен 5. Я запутался. я что-то пропустил здесь? - person Reg Mem; 24.10.2014
comment
@RegMem Я думаю, вы имели в виду CompetitionRanking, а не DenseRanking - person Shouvik; 13.05.2016