ERR Protocol error: invalid multibulk length: Protocol error: invalid multibulk length(プロトコルエラー: 無効な multibulk 長)
Redis意味
Redis サーバーがクライアントからのバイトストリームを RESP (Redis Serialization Protocol) に従って解析できなかった。multibulk コマンドで宣言された要素数が無効だったため、プロトコルエラーで接続がクローズされた。
原因
通常、Redis 以外のクライアント (例: HTTP 要求、誤ったポートに接続したアプリケーション) が Redis のポートに生データを送信した、壊れた/不完全なクライアントライブラリ、パイプラインでの誤ったフレーミング、またはプロトコルの上限 (proto-max-bulk-len) を超える巨大な要求がきっかけとなる。
対処方法
Redis のポートに実際の Redis クライアントのみが接続していることを確認する (紛れ込んだ HTTP/他プロトコルのトラフィックがないこと)。クライアントライブラリを更新し、RESP のフレーミングを壊す独自/手動のコマンド生成を避ける。非常に大きな値を送信する場合は、proto-max-bulk-len の上限と要求サイズを見直す。ネットワーク上の中間プロキシがデータを破損していないことを確認する。
同じデータベースの他の項目
- ERR wrong number of arguments for commandWrong number of arguments for command(コマンドの引数の数が誤っている)
- ERR Background save already in progressBackground save already in progress(バックグラウンド保存が既に進行中)
- ERR bit offset is not an integer or out of rangeBit offset is not an integer or out of range(ビットオフセットが整数でないか範囲外)
- ERR Number of keys can't be greater than number of argsEVAL/EVALSHA: numkeys exceeds argument count(numkeys が引数の数を超えている)
- ERR WATCH inside MULTI is not allowedWATCH inside MULTI is not allowed(MULTI 内の WATCH は許可されない)
- ERR WAIT cannot be used with replica instancesWAIT cannot be used with replica instances(WAIT はレプリカインスタンスでは使用できない)
- ERR Background append only file rewriting already in progressAOF rewrite already in progress(AOF 書換えが既に進行中)