Выберите определенные элементы хэша, используя значения набора в Redis

#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 для этого поля.