javascript - 在 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
解决方案
你应该这样做:
const reply = await getAsync(fs.readFileSync('./lib/test1.lua'), keylist.length, ...keylist);
推荐阅读
- macros - 使用 M4,如何从字符串中提取代码并增加缩进?
- python - 如何将列表转换为年份
- node.js - 如何从局域网外部连接到 Nodejs 服务器
- python - 如何在批量 pytest 执行中使用对象的 __subclasses__() 方法?
- git - 用于在 GIT 上手动合并 2 个分支的 GUI
- c# - 错误 CS7036:没有给出与“Vector2.Vector2(float, float)”所需的形参“y”相对应的参数
- java - Elastic Search 和 Y10k(超过 4 位数的年份)
- javascript - VS Code 中的“找不到任务‘npm’”错误
- amazon-web-services - 每个子域的 AWS S3 静态网站存储桶路由
- r - 根据另一列的条件,对单个数据框列中的值进行 Wilcox 检验