#redis
#redis
Вопрос:
Я новичок в Redis, но хотел бы добиться следующего как можно быстрее.
У меня есть набор идентификаторов для каждой страны, например, следующий:
SADD country:uk 1 2
SADD country:de 5 6
У меня есть хэш с меткой времени и идентификаторами из набора стран, например
HSET ts1:1 x 1 y 2
HSET ts1:2 x 3 y 4
HSET ts1:3 x 3 y 4
Я хотел бы использовать country:uk
ключ для извлечения только значений хэшей ts1:1
and ts1:2
.
Я понимаю, что могу вернуть идентификаторы в стране, заданные на моем языке программирования, а затем сконструировать вызовы для извлечения значений, но надеялся, что есть способ напрямую сделать это в Redis без нагрузки на сеть. Возможно, с использованием сценариев lua.
Обновление: обновленный пример, чтобы быть ближе к тому, чего я пытаюсь достичь
Ответ №1:
Да, как вы упомянули, вы можете обернуть логику в сценарии Lua, что может снизить нагрузку на сеть.
Однако, если поля вашего ХЭША фиксированы или у вас ограниченное количество полей, вы можете использовать SORT
команду для достижения своей цели.
SORT country:uk BY NOSORT GET ts1:*->field1 GET ts1:*->field2
Комментарии:
1. Спасибо, что не видел, чтобы сортировка использовалась подобным образом. Гарантирован ли порядок вывода, чтобы я мог в вашем примере разделить возвращаемые значения на пары, предполагая, что каждая пара получена из одного и того же ключа? Таким образом, результатом будет field1, field2, fleld1, fleld2 и т.д.
2. @Anake ДА, результат упорядочен. Также, если поле не существует в каком-либо хэше, оно возвращает nil для этого поля.