Любой способ использовать строки в качестве партитуры в отсортированном наборе Redis (zset)?
Или, возможно, вопрос должен звучать так: как лучше всего представить строку в виде числа, чтобы сортировка их числовых представлений давала бы такой же результат, как если бы она сортировалась как строки? Я придумал способ сортировки до 9 символов в строке, но, похоже, должен быть намного лучший способ.
Заранее, я не думаю, что использование лексикографических команд Redis будет работать. (См. Следующий пример.)
Пример: Предположим, я хочу предварительно отсортировать все имена, связанные с каким-либо идентификатором, чтобы я мог использовать ZINTERSTORE для быстрого получения упорядоченного списка идентификаторов на основе их имен (без использования команды SORT в redis). В идеале у меня должны быть идентификаторы в качестве членов zset, а числовое представление каждого имени - это оценки zset.
Имеет ли это смысл? Или я ошибаюсь?
1 ответ
Вы пытаетесь использовать хеш-функцию, сохраняющую порядок, чтобы получить оценку для каждого идентификатора. Хотя кажется, что вы написали один, вы уже узнали, что диапазон партитуры позволяет вам использовать только первые 9 символов (было бы интересно увидеть вашу функцию между прочим).
Вместо этого подхода, вот более простой, который будет проще IMO - используйте набор членов формы <name>:<id>
и установите счет на 0. Вы сможете использовать лексикографический порядок таким образом и использовать что-то вроде split(':')
чтобы получить идентификатор от участников набора.