萌えハッカーニュースリーダー

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

出典: https://neversleeps.moscow/publications/resp.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士の部屋は、さながら秋葉原の電気街ですね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search