gpt4 book ai didi

node.js - 你如何在redis中使用lua将可用结果返回给nodejs

转载 作者:IT王子 更新时间:2023-10-29 06:14:57 28 4
gpt4 key购买 nike

我正在为我的移动应用程序 API 实现的模块之一是从提交用户名获取所有未完成的通知。

我使用了一个名为 username:notifications 的列表来存储所有未完成的通知 ID。比如我的测试用例中,['9','10',11']就是调用for之后的结果

lrange username:notifications 0 -1

所以我写了一个 lua 脚本来获取 lrange 和每个结果,

hgetall notification:id 

由于某些原因,lua 无法将表发送到可用状态的 nodejs。想知道有没有人有多个hgetall请求返回给nodejs的解决方案

剩下的代码如下:-- @KEYS: "用户名"-- @ARGV: 用户名

-- gets all fields from a hash as a dictionary
local hgetall = function (key)
local bulk = redis.call('HGETALL', key)
local result = {}
local nextkey
for i, v in ipairs(bulk) do
if i % 2 == 1 then
nextkey = v
else
result[nextkey] = v
end
end
end

local result = {}
local fields = redis.call('LRANGE' , ARGV[1], 0,-1)

for i, field in ipairs(fields) do
result[field] = hgetall('notification:'..field)
end

return result

最佳答案

您不能从 Lua 脚本返回“字典”,它不是有效的 Redis 类型(参见 here)。

可以做的是这样的:

local result = {}

local fields = redis.call('LRANGE' , ARGV[1], 0, -1)

for i=1,#fields do
local t = hgetall('notification:' .. fields[i])
result[#result+1] = fields[i]
result[#result+1] = #t/2
for j=1,#t do
result[#result+1] = t[j]
end
end

return result

结果是一个简单的列表,格式如下:

[ field_1, nb_pairs_1, pairs..., field_2, nb_pairs_2, ... ]

您需要在您的 Node 程序中对其进行解码。

编辑:还有另一种解决方案,在您的情况下可能更简单:将结果编码为 JSON 并将其作为字符串返回。

只需将代码的最后一行替换为:

return cjson.encode(result)

并在您的 Node 代码中从 JSON 解码。

关于node.js - 你如何在redis中使用lua将可用结果返回给nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26082121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com