【入門編】 Pub/Subの内部構造 – Redis

やあ。Redisの世界へようこそ。
Redisを単なる「高速なキーバリューストア」だと思っているなら、それはまだ氷山の一角に過ぎない。今日はその中でも、システム同士を魔法のように繋ぐ「Pub/Sub(パブサブ)」という仕組みについて、少し深く、それでいて分かりやすく紐解いていこう。

ここをマスターすれば、君が作るシステムは単なる「データの貯蔵庫」から「リアルタイムに息づく生命体」へと進化するはずだ。

—

1. Pub/Subって、結局何者なの?

Pub/Subとは、「Publish(出版)」と「Subscribe(購読)」の略だ。
これを理解するために、少しだけ日常の例え話をしよう。

君が「最新のゲーム攻略情報」が大好きだとしよう。君は攻略サイトの「ニュースレター」に登録するよね。サイト側は新しい記事を書いたら、登録者全員に一斉にメールを送る。

  • Publish(出版): 攻略サイトがニュースを配信すること。
  • Subscribe(購読): 君がニュースレターに登録して、届くのを待つこと。

RedisのPub/Subもこれと全く同じだ。「チャンネル」という名前の掲示板を介して、送る側(Publisher)と受け取る側(Subscriber)がやり取りをするんだ。

—

2. Redisで実際に動かしてみよう

まずは、Redisでこの仕組みを体験してみよう。ターミナルを2つ開いてほしい。

ターミナルA(受け取る側:購読者)

「news」というチャンネルを購読するよ
SUBSCRIBE news
実行すると、Redisはこの状態でメッセージを待ち続ける

ターミナルB(送る側:配信者)

「news」チャンネルにメッセージを送る
PUBLISH news “Hello, Redis World!”

ターミナルAを見てごらん。`”Hello, Redis World!”` というメッセージが瞬時に表示されたはずだ。これがRedisのPub/Subの基本だ。驚くほどシンプルだろう?

—

3. 「パターン購読」というワザ

Redisの面白いところは、特定のチャンネル名だけでなく、「パターン」で購読できる点にある。

例えば、`news.sports`、`news.tech`、`news.music` というチャンネルがあったとして、`news.` と指定すれば、`news` で始まるすべてのチャンネルを一度に購読できるんだ。

「news.」で始まるすべてのチャンネルを購読する
PSUBSCRIBE news.

これを使えば、いちいちチャンネルを個別に指定する手間が省ける。「広い範囲をカバーしたい」という時に非常に便利なテクニックだ。

—

4. 伝説のエンジニアとして伝えたい「落とし穴」

さて、ここからが本題だ。多くの初心者がここで躓く。
RedisのPub/Subは「爆速」だが、実は「非常に忘れっぽい」という特性がある。

  • メッセージは保存されない:

Pub/Subは、あくまで「その瞬間に接続している人」だけにメッセージを届ける仕組みだ。もし、君がオフラインの間に誰かがメッセージを送っても、君が再接続したときに過去のメッセージが届くことはない。

  • 配信保証がない:

Redisはメッセージを「投げたら終わり」だ。相手が受け取れたかどうかをRedisは気にしない。ネットワークが途切れたら、その瞬間のメッセージは永遠に失われる。

「じゃあ、大事なデータには使えないじゃないか!」
その通り。Pub/Subは「リアルタイムの通知」や「チャットのメッセージ」のような、「流れていっても構わない、あるいはリアルタイム性が全て」という用途には最強だが、決済データのような「絶対に失ってはいけない情報」には向かないんだ。

もし永続性が必要なら、Redisの「Streams」という別の武器を使う必要がある。それはまた別の機会に話そう。

—

最後に:君の武器にするために

Pub/Subの内部構造を理解することは、システムを「疎結合(パーツ同士が直接依存しない状態)」にするための第一歩だ。

1. Pub/Subは「リアルタイムの連絡網」。
2. 接続していない人には届かない(非永続性)。
3. パターンマッチングで効率的に情報を拾う。

この3つさえ押さえておけば、君はもうRedisのPub/Subを使いこなす準備ができている。

焦る必要はない。まずは自分の手で `PUBLISH` と `SUBSCRIBE` を試して、そのレスポンスの速さを体感してほしい。「自分のコードが、ネットワークの向こう側に瞬時に届く」という感覚、これこそがエンジニアリングの醍醐味だからね。

何か詰まったら、いつでも聞きに来るといい。君の成長を心から楽しみにしているよ。

コメント

タイトルとURLをコピーしました