Могу ли я определить пользовательскую функцию сравнения для Redis Zset? - PullRequest
1 голос
/ 25 мая 2019

Справочная информация:
Теперь я использую php + redis в качестве моего бэкэнда для сохранения ранга.И Zset, кажется, является хорошим решением для этого.Однако, ранг содержит несколько баллов, и если первый балл равен, мне нужно сравнить второй балл, чтобы определить порядок.Всего получено 3 балла.

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

ожидаемый результат:

zadd myset 1000_100_3000 matchId1
zadd myset 1000_2500_250 matchId2
zadd myset 1000_2500_200 matchId3

zrange myset 0 -1 возвращает:

matchId2
matchId3
matchId1

как то так

1 Ответ

1 голос
/ 26 мая 2019

Краткий ответ: нет, вы не можете этого сделать

Однако вы часто можете составлять несколько ключей таким образом, чтобы сделать их сортируемыми.В вашем случае очевидным кандидатом будет определить максимальный диапазон трех частей и просто собрать их все в одно большое число.Например, 1000_100_3000 может быть числом 100001003000 (4 десятичных знака на порцию), которое можно тривиально сравнить или разложить.Вы также можете думать с точки зрения битов, а не цифр, хотя.Например, возможно разрешить 20 бит на сегмент и использовать битовые операции сдвига / маски для компоновки / декомпозиции (т.е. (1000 << 40) | (100 << 20) | (3000))

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