Запрос REDIS с помощью HMSET

Я использую хранилище данных REDIS и создал HMSET, например:

HMSET key:1 source 5 target 2
HMSET key:2 source 3 target 1
HMSET key:3 source 3 target 5
HMSET key:4 source 6 target 2
HMSET key:5 source 2 target 3    

Теперь я хочу запросить эти ключи на основе предоставленного исходного и целевого списка. Предположим, список источника и цели равен [2, 3, 6]

Я хочу иметь запрос типа

select from key where source in[2, 3, 6] and traget in[2, 3, 6]

который даст мне результат, как

key:4 source 6 target 2 
key:5 source 2 target 3

person Rudra    schedule 21.09.2015    source источник
comment
Ваш вопрос очень специфичен для Redis. И в вопросе нет кода узла. Таким образом, все теги, кроме [redis], неактуальны, пожалуйста, удалите их, чтобы не засорять ленту вопросов людей.   -  person Sergio Tulentsev    schedule 21.09.2015
comment
Я использую node-redis в качестве клиента для выполнения того же кода. Я думаю, что имеет смысл добавить node-redis в качестве тега.   -  person Rudra    schedule 21.09.2015
comment
Не уверен, что это добавляет большую ценность. Я полагаю, node-redis позволяет выполнять весь спектр команд Redis? Если это так, это не добавляет никакой информации к вопросу.   -  person Sergio Tulentsev    schedule 21.09.2015


Ответы (1)


С таким набором данных (всего несколько наборов) ваш единственный вариант — перебрать их (либо в сценарии lua, либо путем загрузки в приложение) и выполнить фильтрацию самостоятельно, проверив хэши.

Чтобы ускорить процесс, вы можете поддерживать вторичные индексы (опять же, усилия за вами). Что-то типа:

SADD source:3 key:2 key:3
SADD target:2 key:1 key:4

Затем вы можете относительно быстро найти все подходящие ключи, введя команду SINTERSTORE

SINTERSTORE found_keys source:2 source:3 source:6 target:2 target:3 target:6

У вас будут ключи, которые вы ищете под именем found_keys.

Хотя, если вы обнаружите, что делаете это, вы должны спросить себя: почему бы мне просто не сдаться и не использовать базу данных с поддержкой SQL, потому что я явно хочу ее.

person Sergio Tulentsev    schedule 21.09.2015
comment
Мы переносим модуль интенсивной записи с mongodb на Redis для временного хранения данных. В монго есть запрос на чтение, который я хотел преобразовать в Redis, чтобы добиться того же результата с минимальными изменениями. В любом случае, спасибо за ваш ответ. - person Rudra; 21.09.2015