Redis отсортировал рейтинг рейтинга лидеров на тот же счет - PullRequest
0 голосов
/ 05 октября 2018

Я использую отсортированный по Redis набор для реализации таблицы лидеров в моей игре, где я показываю рейтинг пользователя в порядке убывания.Я застрял в случае, когда два или более пользователей имеют одинаковый счет.Так что в этом случае я хочу получить более высокий рейтинг пользователя, который первым получит оценку.Например, я добавляю следующие записи в Redis.

127.0.0.1:6379> zadd testing-key 5 a
(integer) 1
127.0.0.1:6379> zadd testing-key 4 b
(integer) 1
127.0.0.1:6379> zadd testing-key 5 c
(integer) 1

, и когда я запрашиваю ранг в обратном порядке, я получаю

127.0.0.1:6379> zrevrange testing-key 0 10
1) "c"
2) "a"
3) "b"

, нов моем случае ранжирование должно быть примерно таким:

1) "a"
2) "c"
3) "b"

Так есть ли в Redis какое-либо положение о предоставлении более высокого приоритета сущности, которая заняла первое место в наборе с таким же счетом?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я нашел одно решение этой проблемы.В моем случае счет представляет собой целое число, поэтому я преобразовал его в десятичную и добавил Long.MAX_VALUE - System.nanoTime() после десятичной.Таким образом, итоговый код счета выглядит следующим образом:

double finalScore = score.(Long.MAX_VALUE - System.nanoTime());

Таким образом, итоговый счет игрока, который набрал первый балл, будет выше, чем второй.Пожалуйста, дайте мне знать, если у вас есть лучшее решение.

0 голосов
/ 05 октября 2018

Если результаты вашей таблицы лидеров достаточно малы, вы можете использовать комбинацию оценки и отметки времени (например, 123.111455234, где 123 - оценка).Тем не менее, поскольку показатель Sorted Set является двойной плавающей запятой, вы можете потерять точность.

В качестве альтернативы, оставьте два Sorted Set - один со счетом в таблице лидеров каждого игрока, а другой - со штампом времени каждого игрока, и используйте оба дляопределить порядок.

Или использовать один отсортированный набор для таблицы лидеров, закодировать временную метку как часть члена и полагаться на лексикографическое упорядочение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...