я использую Некипелов / redisclient чтобы получить доступ к Redis, мне нужно получить несколько хеш-данных одним вызовом Redis, чтобы повысить производительность.
Более конкретно, я пытаюсь получить несколько хешей, как показано ниже:
redis-cli --ldb --eval /tmp/script.lua hash_key1 hash_key2
где script.lua:
local r = {}
for _, v in pairs(KEYS) do
r[#r+1] = redis.call('HGETALL', v)
end
return r
Но мне сложно выразить вышесказанное с помощью команды EVAL через некипелов / redisclient.
Я попробовал что-то ниже:
redisclient.command("EVAL", {"/tmp/script.lua", hash_key1, hash_key2}
но, очевидно, это неправильно.
Я нашел решение, и проблема появилась в том, как я создал команду EVAL в redisclient — я передавал скрипт Lua в виде файла:
const std::string script =
"local r = {} ""for _, v in pairs(KEYS) do ""r[#r+1] = redis.call('HGETALL', v) ""end ""return r ";
const unsigned int numKeys = 2;
const std::string key1 = "hash_key1";
const std::string key2 = "hash_key2";
result = redisclient.command("EVAL", {script, std::to_string(numKeys), key1, key2});
Других решений пока нет …