NOSCRIPT: NOSCRIPT No matching script. Please use EVAL(一致するスクリプトがない)
Redis意味
EVALSHA で呼び出された Lua スクリプトの SHA1 ダイジェストがサーバーのスクリプトキャッシュに見つからなかった。Redis はこのハッシュに対応するスクリプトを知らない。
原因
サーバーが再起動されたか SCRIPT FLUSH でスクリプトキャッシュがクリアされた、スクリプトが一度もロードされていない、またはフェイルオーバー後の新しいノードでキャッシュが空。
対処方法
スクリプトを EVAL で本体ごと実行する (Redis が自動でキャッシュする) か、先に SCRIPT LOAD でロードし、返された SHA を EVALSHA で使う。アプリケーションでは NOSCRIPT エラーを捕捉し、EVALSHA から EVAL へのフォールバックロジックを実装する。多くの Redis クライアントライブラリはこれを自動で行う。
同じデータベースの他の項目
- CROSSSLOTCROSSSLOT Keys in request don't hash to the same slot(キーが同じスロットにハッシュされない)
- MOVEDMOVED slot ip:port (クラスタリダイレクト)
- ASKASK slot ip:port (クラスタリダイレクト)
- EXECABORTEXECABORT Transaction discarded because of previous errors(以前のエラーによりトランザクションを破棄)
- NOPERMNOPERM this user has no permissions to run the command or access one of the keys(コマンド実行またはキーアクセスの権限がない)
- ERR value is not an integer or out of rangeERR value is not an integer or out of range(値が整数でないか範囲外)
- ERR value is not a valid floatERR value is not a valid float(値が有効な float ではない)