我想调用我的 lua 脚本来增加库存中的物品数量,但遇到了一个异常:
ERR 错误运行脚本(调用 f_sha):@user_script:108:路径“$.inventory.1x1.c”不存在或不包含数字
这是lua脚本代码
local dbCount = redis.call("JSON.MGET", userId, itemPath..".c") -- attempts to check number of existing item count in db
if is_empty(dbCount) or is_empty(dbCount[1]) then -- if not found then try to create
local ss
local se
ss, se = string.find(itemData, 'x')
local itemId = tonumber(string.sub(itemData, 1, ss))
[LINE 106 IS EXPECTED >> ] redis.call("JSON.SET", userId, itemPath, "{\"id:\":"..itemId..",\"c\":"..adjust.."}")
else -- if exists then try to increase
[LINE 108 WHERE ERROR OCCURS >> ] redis.call("JSON.NUMINCRBY", userId, itemPath..".c", adjust)
end
和
- userId 为 key,eg: User1
- itemData 为“1x1”(格式为
item id
++作为字符串x
)version
- itemPath 是库存物品的路径,例如:“inventory.1x1” 其中“1x1”是物品数据
- itemPath..".c" 是库存中特定项目数量计数的路径,例如:"inventory.1x1.c"
- is_empty(input) 是检查输入是否为
nil
或的本地函数empty string
期望:上面的代码检查“库存”字典中是否存在键“1x1”,如果还没有,则创建新记录,否则通过命令"1x1":{"id":1,"c":adjust amount}
执行数字增加。JSON.NUMINCRBY
使用不存在“1x1”的测试数据,因此应执行第 106 行
实际结果:代码运行失败,在第 108 行出现异常,正如我在上面粘贴的那样
第一行的结果local dbCount = redis.call("JSON.MGET", userId, itemPath..".c")
是一个表值,第一个参数是null
因为项目“1x1”在用户的库存中尚不存在:
1) null
但是我使用的条件是is_empty(dbCount) or is_empty(dbCount[1])
应该触发并且脚本会尝试创建新记录(第 106 行)。我不知道为什么它是假的,redis 试图增加金额(第 108 行)