0

我想调用我的 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++作为字符串xversion
  • 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 行)

4

0 回答 0