Как реализовать многократную сортировку данных из редиса?

Есть список пользователей, отсортированный по некому числовому показателю. Храню все это дело в сортированном множестве в редисе (score: этот числовой показатель, value: userId). Итого, запросом zrevrange от O до O+L-1 (где L - это limit, O - offset) я получаю данные в порядке убывания числового параметра. Все отлично.

Теперь встала необходимость во вторичной сортировке по некому другому параметру (по userId создается моделька пользователя, где есть некий другой числовой параметр; если важно - он хранится аналогичным образом в редисе, получается запросом zrevrank).

Под вторичной сортировкой я имею ввиду сортировку вида SQL ORDER BY field1, field2, ..., etc.
  • Вопрос задан
  • 361 просмотр
Пригласить эксперта
Ответы на вопрос 1
Фишка в том, что сортедсеты не сортируются в момент запроса на получение данных. Они хранятся уже сортированными, а сортируется все в момент изменения данных.
Когда мы запрашиваем данные, redis уже знает где они лежат.

Как вариант, каким-то образом посчитать score в таком виде, что бы записи уже лежали отсортированными. Но тогда для каждого набора полей создавать по сортедсету.
Для field1, field2 -- один
Для field1, field2, field3 -- другой

Еще можно хранить несколько сортированных множеств для каждого поля. А потом "налету" объединять их с помощью ZUNIONSTORE/ZINTERSTORE и искать уже в результате вычислений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы