Предположим, у вас есть хэш «пользователи», записи которого сопоставляют числовые идентификаторы с массивами в кодировке JSON, поэтому, например, целое число 1 сопоставляется со строкой {имя: 'Джон', фамилия: 'Доу', род занятий: 'сантехник'} .
Числовые идентификаторы элементов в хэше хранятся в различных списках. Таким образом, если 'foobar' является одним из этих списков, для извлечения из него фактических данных я бы запустил простой скрипт Lua (реализующий операцию соединения на стороне сервера). Или, как я только что узнал, я мог бы использовать что-то вроде
SORT foobar BY inexistent_key GET user:*
но это подразумевает хранение данных каждого пользователя в отдельном ключе, что кажется дорогостоящим (в моем случае у меня много небольших коллекций, поэтому я хочу воспользоваться сжатием хэшей Redis).
Наконец, возникает вопрос: мне нужно упорядочить эти списки в алфавитном порядке, скажем, по фамилии каждого пользователя, а затем по имени. Как лучше всего добиться этого, не меняя слишком сильно базовую модель данных (если возможно)?
Пока что лучшее, что я мог придумать, - это использовать команду SORT вместе с предложениями BY и STORE, то есть запускать
SORT foobar BY surname:* STORE foobar
всякий раз, когда список изменяется, но для этого мне понадобится много ключей. Мне кажется, если бы я мог использовать хеш в предложении BY, это было бы идеальным решением.
Если бы поля, которые я хочу отсортировать, были как-то ограничены (например, всего пара сотен фамилий), я мог бы подумать о сопоставлении строк с целыми числами и использовать отсортированный набор Redis, но, похоже, это не так.