首页 > 解决方案 > 在 Nodejs 中使用 Lua 脚本的 Redis mget

问题描述

我正在传递一组键。在这里keylist = ['KEY_100', 'KEY_101'] ,我想获取键的所有值。但是我得到一个错误说这个,node_redis: Deprecated: The EVAL command contains a argument of type Array. github中有一个问题建议使用 toString() 并再次解析最后的值。但我对这个答案很满意。谁能帮我解决这个问题?

节点:

getDataLua (keylist) {
    console.log('lua keylist:', keylist)
    const getAsync = promisify(this.client.eval).bind(this.client)
    const reply = await getAsync(fs.readFileSync('./lib/test1.lua'), 1, keylist)
    console.log('reply', reply)
    return reply
  }

Lua脚本:

local keys = redis.call('keys', KEYS[1])
local values = redis.call('mget', unpack(keys))
local keyValuePairs = {}
for i = 1, #keys do
  keyValuePairs[i] = .. values[i]
end
return keyValuePairs

标签: javascriptnode.jsredislua

解决方案


你应该这样做:

const reply = await getAsync(fs.readFileSync('./lib/test1.lua'), keylist.length, ...keylist);

推荐阅读