ERR DISCARD without MULTI: DISCARD without MULTI(MULTI なしの DISCARD)
Redis意味
MULTI ブロックが開いていない状態で DISCARD が送信された。DISCARD は進行中のトランザクションを取り消すためだけに使用され、取り消す対象がない場合にこのエラーを返す。
原因
MULTI なしで、またはトランザクションが既に EXEC/DISCARD で閉じられた後に再度 DISCARD を呼び出した、エラー処理コードでの無条件の DISCARD 呼出し、または接続状態が想定と異なる (プールから取得した接続で MULTI が開いていない)。
対処方法
MULTI が実際に開いている場合にのみ DISCARD を呼び出し、コード内でトランザクション状態を追跡する。エラーハンドラでは DISCARD を呼ぶ前にトランザクションが開いているか確認する。状態を自動管理するライブラリのトランザクションラッパーを使用する。コネクションプールでクリーンな状態を保証する。
同じデータベースの他の項目
- ERR Lua script attempted to access nonexistent global variableLua script attempted to access a nonexistent global variable(Lua スクリプトが存在しないグローバル変数にアクセスしようとした)
- ERR unknown commandUnknown command(不明なコマンド)
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)(スロットの rehash 中の複数キー要求)
- BUSYGROUP Consumer Group name already existsConsumer group already exists(コンシューマグループが既に存在する)
- NOGROUP No such key or consumer groupNo such key or consumer group in stream(ストリームにそのキーまたはコンシューマグループがない)
- NOTBUSY No scripts in execution right nowNo scripts in execution right now(現在実行中のスクリプトはない)
- DENIED Redis is running in protected modeRedis is running in protected mode(Redis は保護モードで稼働中)