プロトコル・バイナリシリアライズ

Redis RESP解析生のバイトと型を追う

エスケープされたRESPテキストまたはHexバイトを入力し、Redisへの接続なしでフレームを調べます。

Redis RESP解析

RESP入力

解析結果

RESPデータを入力するか、例を選んでください。

ブラウザー内で解析し、Redisへ接続・送信しません。

設定

RESPデータを入力するか、例を選んでください。

Redisのログに$5や*3が見えても、クライアントの表示だけでは長さのずれを特定できません。Redis RESP解析ではプレフィックスから各値のバイト範囲までたどり、通信データそのものを検査できます。

Redis RESP解析を使う理由

静的な通信データを型と境界を残したまま読み解きます。

ストリームの区切りを検査

Redis RESP解析はRESP3の各チャンクの宣言バイト長と終端を確認してから連結します。結果にもチャンク数を残し、終端がない入力を完成した値として扱いません。

複数のバイトチャンクが一つの型付き値にまとまり境界は残る図

JSON変換でも型を失わない

バイナリbulkはHex、mapは順序付きのキーと値、属性は後続の値に付けて出力します。通常のJSONオブジェクトに押し込むと失われる違いが見えます。

バイナリ値と数値のmapキーと属性が別々のJSON欄に分かれる図

デコード結果を信じる前に確認すること

01

入力の表記を合わせる

初期設定では文字列の\rと\nをCRLFバイトに変換します。テキスト以外のbulkはHexに切り替えます。単独のLFを自動修正しません。

  • 長さは文字数ではなくUTF-8バイト数です。
02

分かる場合だけバージョンを指定

自動設定はRESP2とRESP3の共通型を受け入れ、RESP3固有の型を示します。RESP2指定時は固有のプレフィックスを拒否します。

  • 自動解析は350ミリ秒後。手動時はCtrl/Cmd + Enterも使えます。
03

範囲を見てから書き出す

型ツリーのバイト範囲と宣言長を確認します。最上位の文字列配列はコマンドらしい形を表示しますが、実行可能性は判定しません。

  • 入力や設定の変更後は再解析するまでコピーと保存を無効にします。

RESP形式の内側を確かめる

RESP2とRESP3の型ツリー

Redis通信プロトコルのnull bulk、空bulk、配列、map、push、サーバーエラー値を区別します。エラー返信を構文エラーと混同しません。

厳密なバイト長検証

宣言されたbulkの長さ、実際のUTF-8バイト数、末尾のCRLFが合わなければ、最初の位置をバイトオフセットと入力行で示します。

連続フレームとコマンド形式

パイプラインの複数フレームを順番に表示します。配列の先頭がコマンド名らしくても、Redisが受理するとは断言しません。

型付きJSONへの対応

RESPパーサーの出力はバイナリのHex、大きな整数の10進文字列、mapの順序付き項目、属性を保持します。

通信データだけでは分からないこと

Redisに接続しない
Redisプロトコルの貼り付けたバイトだけを調べます。SETを実行せず、キーも読み取らず、データベース状態を再現しません。
接続の協議結果は推測しない
RESP2とRESP3の共通型は同じ形です。自動判定が示すのは解析に必要な最小バージョンであり、実際のHELLO結果ではありません。
バイナリを文字列にしない
UTF-8として不正なbulkはHexを残します。文字化けした置換文字や通常のJSONオブジェクトで元データを隠しません。
完全で上限内の入力が必要
Redis RESP解析は正確なCRLFとバイト長を要求します。上限は1 MiB、1000フレーム、10000ノード、64階層です。途中で切れたストリームはエラーにします。

Redis RESP解析のよくある質問

RedisのRESP形式をどう読めばよいですか?

先頭バイトが型を示し、CRLFと長さが境界を決めます。入力したデータの各値を型ツリーで確認し、宣言値と実際の範囲を比べられます。

Redisコマンドの通信表現を確認できますか?

最上位の文字列配列なら、コマンド名と引数の数を表示します。形式を見る機能であり、サーバーへの送信やコマンドの妥当性判定はしません。

RESP2とRESP3の違いを確認できますか?

map、真偽値、pushなどRESP3固有の型を検出できます。共通型だけなら、接続でどちらを選んだかは分かりません。

bulkの長さは日本語の文字数ですか?

いいえ。$の後はバイト長です。日本語の文字はUTF-8で複数バイトになるため、画面に見える字数と一致しないことがあります。

パイプラインの返信をまとめて解析できますか?

完全なRESPフレームを連結した入力は順に表示します。途中で切れた値はエラーになり、不完全な結果を完成品として書き出しません。

疑問が残っていますか?

取得したフレームをRedis RESP解析で確認

クライアントを直す前に、最初にずれたバイトを確認してください。Redis RESP解析は完全に読めた結果だけを書き出せます。

処理はブラウザー内だけで行います。