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 がキーです。例: User1
  • itemData は "1x1" (フォーマットはitem id+ x+version文字列)
  • itemPath はインベントリ アイテムのパスです。例: "inventory.1x1" ここで、"1x1" はアイテム データです。
  • itemPath..".c" は、インベントリ内の特定のアイテムの数へのパスです。例: "inventory.1x1.c"
  • is_empty(input) は、入力が anilまたは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行目)

4

0 に答える 0