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 がキーです。例: User1
- itemData は "1x1" (フォーマットは
item id
+x
+version
文字列) - itemPath はインベントリ アイテムのパスです。例: "inventory.1x1" ここで、"1x1" はアイテム データです。
- itemPath..".c" は、インベントリ内の特定のアイテムの数へのパスです。例: "inventory.1x1.c"
- is_empty(input) は、入力が a
nil
またはempty string
期待: 上記のコードは、キー "1x1" が "inventory" ディクショナリに存在するかどうかを確認します。まだ存在しない場合は、新しいレコードを作成し"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 行目)。なぜfalseだったのかわかりません.redisは量を増やそうとします(108行目)