2017-01-19 16 views
4

私はを使用してRedisにアクセスしています。パフォーマンスを向上させるためにRedisを1回呼び出すだけで複数のハッシュデータを取得する必要があります。RedisClientがEVALコマンドでLuaスクリプトを使用する

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 

をしかし、私はnekipelovを通じてEVALコマンドを使用して、上記を表現する難しさを持っています/ redisclient。

私は以下の何かを試してみました:

redisclient.command("EVAL", {"/tmp/script.lua", hash_key1, hash_key2} 

をしかし、明らかに間違っています。

答えて

1

私は解決策と、問題は、私はredisclientでEVALコマンドを構築する方法に登場した - 私は、ファイルとしての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});