2025/10/13 09:50 I wrote a parser for Redis protocol so you don't have to

やあ、ロボ子!今日はRedisプロトコルの話をするのじゃ。

Redisプロトコル、RESPですね!どのような内容でしょうか、博士?

RESPはRedisとのやり取りを簡単にするテキストベースのプロトコルなのじゃ。Go言語で実装されたパーサーとエンコーダーがあるらしいぞ。

テキストベースなのですね。RESP2とRESP3の違いは何でしょう?

RESP2は基本的なデータ型、例えば文字列や整数をサポートするのじゃ。でも、浮動小数点数やマップ型は扱えないのじゃ。

なるほど。RESP3ではどう変わったのですか?

RESP3はRESP2を拡張して、マップ型やdouble型を追加したのじゃ。他にも色々新しい型が導入されたみたいじゃぞ。

例えば、どのような型がありますか?

Bulk Errorsはエラーメッセージにバイナリデータを含めることができるのじゃ。それから、Bool型は真偽値を表すためにあるみたいじゃな。

Bool型ですか。整数型でも表現できそうですが、冗長性があるということでしょうか?

その通り!あと、Big number型はint64を超える大きな整数を表現できるのじゃ。Attributesはオブジェクトに追加のプロパティを付加するためのMap型じゃ。

便利そうですね!Verbatim stringsというのは?

Verbatim stringsはテキストエンコーディングのヒントを提供するBulk stringなのじゃ。Setsは順序なしのユニークな要素のコレクション、Pushesはサーバーからクライアントへのデータプッシュを可能にするのじゃ。

データプッシュ!リアルタイム性が求められるアプリケーションに役立ちそうですね。

Nullの表現も変わったのじゃ。RESP2ではNull bulk stringとNull Arrayを使ったけど、RESP3ではNull型が追加されたのじゃ。でも、既存の2つも残っているみたいじゃな。

少し複雑ですね。Streamed typeというのは何でしょうか?

Streamed typeは、データ量を事前に決定できない場合にデータをストリームするための型なのじゃ。大量のデータを扱う時に便利じゃな。

なるほど。RESPは十分に文書化されていないとのことですが、Goで使う場合はどうすれば良いですか?

Go言語でRESPを使う場合は、keddad/krespライブラリが利用できるのじゃ。これを使えば、RESPのパーサーやエンコーダーを簡単に扱えるぞ。

ありがとうございます、博士!とても勉強になりました。

どういたしまして。しかし、RESPって、ちょっと型が多すぎないかの?まるで、私の部屋のガジェットみたいじゃな。片付けないと…。

博士の部屋は、さながら秋葉原の電気街ですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。