2014-10-07 6 views
1

В последнее время я использую REDIS SortedSet реализовать игру ранга для каждого пользователя, но у меня есть проблема:Redis SortedSet: как получить значения в числовом порядке, а не в алфавитном порядке, когда два значения имеют одинаковый балл?

zadd game_rank 55 6435 
zadd game_rank 55 6088561 
zadd game_rank 55 608825 
zrange game_rank 0 -1 

результат является:

"60882561" 
"608852" 
"6435" 

Я хочу знать, если это можно получить значение в числовом порядке, когда в том же счете:

"6435" 
"608852" 
"60882561" 

ответ

0

когда члены отсортированного набора имеют одинаковое количество очков, то они сортируются лексически. Нет простого способа заказать их по-разному AFAIK, но вы можете легко выполнить сортировку со стороны клиента. Кроме того, вы можете подготовить короткий сценарий Lua, который сделает это для вас на сервере.

Существует немного хакерский способ, которым вы можете уйти от чего хотите, не прибегая к подходу выше. На примере вы предоставили и ssuming, что оба ранга и идентификатор пользователя являются целыми числами, вы можете использовать баллы, которые являются комбинацией обоих, как так:

zadd game_rank 550006435 6435 
zadd game_rank 556088561 6088561 
zadd game_rank 550608825 608825 

Это позволит вам сделать диапазоны и вы» Получим «числовую» сортировку для каждого ранга (т.е. с zrangebyscore game_rank 550000000 559999999).

 Смежные вопросы

  • Нет связанных вопросов^_^