Любой способ использовать строки в качестве партитуры в отсортированном наборе Redis (zset)?

Или, возможно, вопрос должен звучать так: как лучше всего представить строку в виде числа, чтобы сортировка их числовых представлений давала бы такой же результат, как если бы она сортировалась как строки? Я придумал способ сортировки до 9 символов в строке, но, похоже, должен быть намного лучший способ.

Заранее, я не думаю, что использование лексикографических команд Redis будет работать. (См. Следующий пример.)

Пример: Предположим, я хочу предварительно отсортировать все имена, связанные с каким-либо идентификатором, чтобы я мог использовать ZINTERSTORE для быстрого получения упорядоченного списка идентификаторов на основе их имен (без использования команды SORT в redis). В идеале у меня должны быть идентификаторы в качестве членов zset, а числовое представление каждого имени - это оценки zset.

Имеет ли это смысл? Или я ошибаюсь?

1 ответ

Решение

Вы пытаетесь использовать хеш-функцию, сохраняющую порядок, чтобы получить оценку для каждого идентификатора. Хотя кажется, что вы написали один, вы уже узнали, что диапазон партитуры позволяет вам использовать только первые 9 символов (было бы интересно увидеть вашу функцию между прочим).

Вместо этого подхода, вот более простой, который будет проще IMO - используйте набор членов формы <name>:<id> и установите счет на 0. Вы сможете использовать лексикографический порядок таким образом и использовать что-то вроде split(':') чтобы получить идентификатор от участников набора.

Другие вопросы по тегам