Как реализовать многократную сортировку данных из редиса?
Есть список пользователей, отсортированный по некому числовому показателю. Храню все это дело в сортированном множестве в редисе (score: этот числовой показатель, value: userId). Итого, запросом zrevrange от O до O+L-1 (где L - это limit, O - offset) я получаю данные в порядке убывания числового параметра. Все отлично.
Теперь встала необходимость во вторичной сортировке по некому другому параметру (по userId создается моделька пользователя, где есть некий другой числовой параметр; если важно - он хранится аналогичным образом в редисе, получается запросом zrevrank).
Под вторичной сортировкой я имею ввиду сортировку вида SQL ORDER BY field1, field2, ..., etc.
Забыл сказать, что оба числовых показателя довольно часто меняются, так что кеширование всего списка пользователей, изначально отсортированных по обоим параметрам не подходит.
Фишка в том, что сортедсеты не сортируются в момент запроса на получение данных. Они хранятся уже сортированными, а сортируется все в момент изменения данных.
Когда мы запрашиваем данные, redis уже знает где они лежат.
Как вариант, каким-то образом посчитать score в таком виде, что бы записи уже лежали отсортированными. Но тогда для каждого набора полей создавать по сортедсету.
Для field1, field2 -- один
Для field1, field2, field3 -- другой
Еще можно хранить несколько сортированных множеств для каждого поля. А потом "налету" объединять их с помощью ZUNIONSTORE/ZINTERSTORE и искать уже в результате вычислений.