Я пытаюсь создать набор индексов в Redis для выполнения операций AND.
как это:
inx: цвет волос: блондинка = установлено (key1, key2, key3)
inx: eyecolor: blue = set (key1, key2)
И я могу использовать sinter
, чтобы найти все ключи со светлыми волосами и голубыми глазами.
У меня есть такие хеши:
key1: имя = цвет волос Рика = цвет глаз блондинки = синий
Какой самый быстрый способ получить полученные ключи и получить соответствующие хеши.
Это просто демонстрационные данные, чтобы их было легче понять, я использую их для хранения аналитики, и мне нужно было бы сделать несколько больших наборов поиска ключей.
2 варианта, которые я могу придумать, - это конвейерная передача multi gets + exec
или используя сценарии Lua, чтобы не посылать связку ключей по проводам.
Если есть какой-то лучший способ хранить данные объекта и индексировать его ИЛИ эффективный способ получить все эти хеши без отправки пачки идентификаторов по сети ... пожалуйста, заполните меня!
Редактировать
Я использовал скрипты LUA (используя ветку скриптов redis)
local fkeys = redis.call('sinter', unpack(KEYS))
local r = {}
for i, key in ipairs(fkeys) do
r[#r+1] = redis.call('hgetall',key)
end
return r
Который сохраняет всю обработку на стороне БД.