問題タブ [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.

0 投票する
0 に答える
33 参照

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) は、入力が 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」がユーザーのインベントリにまだ存在しないためです。

しかし、私が使用した条件はis_empty(dbCount) or is_empty(dbCount[1])、どちらがトリガーされ、スクリプトが新しいレコードを作成しようとするかということです (106 行目)。なぜfalseだったのかわかりません.redisは量を増やそうとします(108行目)