ERR Lua script attempted to access nonexistent global variable: Lua script attempted to access a nonexistent global variable(Lua スクリプトが存在しないグローバル変数にアクセスしようとした)
Redis意味
EVAL/EVALSHA で実行した Lua スクリプトが未定義のグローバル変数にアクセスしようとした。スクリプト環境を保護するため、Redis はグローバル変数の作成/読み取りを制限し、そうしたアクセスをエラーとして返す。
原因
スクリプト内で誤ってローカル変数ではなくグローバル変数を使用した (local キーワードの付け忘れ)、タイプミスによる未定義の名前へのアクセス、またはグローバル変数で状態を保持しようとした。サンドボックス化された Redis の Lua 環境ではこれらは許可されない。
対処方法
スクリプト内のすべての変数を local で宣言する: local x = ... タイプミスを修正し、すべての変数が使用前に定義されていることを確認する。スクリプトはステートレスにする。永続的な状態にはグローバルな Lua 変数ではなく Redis のキー (KEYS/redis.call) を使用する。スクリプトは短く決定的に保つ。
同じデータベースの他の項目
- NOPROTO unsupported protocol versionUnsupported RESP protocol version(サポートされない RESP プロトコルバージョン)
- ERR Unknown option or number of arguments for CONFIG SETUnknown option or number of arguments for CONFIG SET (older versions: Unsupported CONFIG parameter)(CONFIG SET の不明なオプションまたは引数の数)
- ERR MULTI calls can not be nestedMULTI calls can not be nested(MULTI はネストできない)
- ERR unknown commandUnknown command(不明なコマンド)
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)(スロットの rehash 中の複数キー要求)
- ERR DISCARD without MULTIDISCARD without MULTI(MULTI なしの DISCARD)
- BUSYGROUP Consumer Group name already existsConsumer group already exists(コンシューマグループが既に存在する)