問題タブ [redisjson]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
redis - パスが存在しないか、番号が含まれていません
lua スクリプトを呼び出してインベントリ内のアイテムの量を増やしたいのですが、例外が発生しました:
ERR スクリプトの実行エラー (f_sha の呼び出し): @user_script:108: パス '$.inventory.1x1.c' が存在しないか、番号が含まれていません
これがluaスクリプトコードです
と
- 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」がユーザーのインベントリにまだ存在しないためです。
しかし、私が使用した条件はis_empty(dbCount) or is_empty(dbCount[1])
、どちらがトリガーされ、スクリプトが新しいレコードを作成しようとするかということです (106 行目)。なぜfalseだったのかわかりません.redisは量を増やそうとします(108行目)