こんにちは。Redisの世界へようこそ。
「Redis」と聞くと、多くの人が「高速なキャッシュ」を思い浮かべるでしょう。確かにその通りです。しかし、Redisにはもう一つ、影の主役とも言える魅力的な機能があります。それが「Pub/Sub(パブリッシュ/サブスクライブ)」です。
今日は、このPub/Subという仕組みを、技術用語の羅列ではなく、皆さんの日常にある「ある光景」に例えて紐解いていきましょう。ここを理解すれば、Redisを単なる「データの置き場所」から「リアルタイムな情報の交差点」へと昇華させることができますよ。
—
1. Pub/Subを「新聞配達」でイメージしよう
専門用語を並べる前に、まずは仕組みを直感的に理解しましょう。
- Pub(パブリッシュ): 出版社が新聞を発行すること。
- Sub(サブスクライブ): 読者が新聞を購読すること。
- チャンネル: 特定のニュースジャンル(例:「テクノロジー」「スポーツ」)。
Pub/Subの仕組みは、まさにこれと同じです。
1. 出版社(Publisher)は、特定の「チャンネル」に向けて記事(メッセージ)を投げ込みます。
2. 読者(Subscriber)は、そのチャンネルを「購読」しています。
3. 出版社が記事を投げた瞬間、購読している読者全員の手元に、その記事が瞬時に届きます。
ここでの重要なポイントは、「出版社は誰が読んでいるかを知らなくていい」し、「読者も出版社が誰かを知らなくていい」という点です。ただ「チャンネル」という共通の合言葉があるだけで、情報のやり取りが成立する。これがPub/Subの美学です。
—
2. Redisで実際に体験してみる
では、実際にRedisでこの「新聞配達」をやってみましょう。ターミナルを2つ開いてください。
手順①:まずは「購読者(Subscriber)」を待機させる
片方のターミナルで、特定のチャンネルを購読(SUBSCRIBE)します。
「news.tech」というチャンネルを購読する
SUBSCRIBE news.tech
実行すると、Redisは「今からこのチャンネルのメッセージを待ち受けますよ」という状態になります
手順②:「出版社(Publisher)」がメッセージを投げる
もう片方のターミナルで、メッセージを発行(PUBLISH)します。
「news.tech」というチャンネルに、ニュースを投げる
PUBLISH news.tech “RedisのPub/Subは最高にシンプルだ!”
返り値として「1」が返ってきます。これは「1人の購読者に届いたよ」という意味です
すると、手順①のターミナルに瞬時にメッセージが表示されるはずです。まさにリアルタイムですね。
—
3. ここが重要!「RedisのPub/Sub」の極限の知見
さて、ここからは少しだけ「アーキテクト」の視点を共有します。初心者の方が陥りやすい罠であり、Redisの真髄でもある注意点です。
「届かなかったメッセージ」は消えてなくなる
これがRedisのPub/Subの最大の特徴であり、注意点です。
もし、購読者がオフラインの間にメッセージが投げられたらどうなるでしょうか? そのメッセージは、どこにも保存されず、永遠に失われます。
RedisのPub/Subは「蓄積」するものではなく、あくまで「その瞬間の通行」を中継する仕組みです。もし「メッセージを確実に届けたい」「後から読み返せるようにしたい」という要件があるなら、Redisの「Stream」という別の機能を検討すべきです。Pub/Subは、あくまで「リアルタイム性こそがすべて」という場面で真価を発揮します。
—
4. どんなところで使われているの?
皆さんが普段使っているチャットアプリや、株価の更新ボード、あるいはWebブラウザ上のリアルタイム通知など、「一斉に、かつ瞬時に情報を配りたい」という仕組みの裏側では、このPub/Subの考え方が深く関わっています。
「ユーザーがログインした」「新しいコメントがついた」といったイベントを、サーバー同士、あるいはクライアント同士で共有するための「神経網」として使うのが、最も賢い活用法です。
—
まとめ:Redisは「情報のハブ」になれる
Pub/Subの基本は、これだけです。
1. SUBSCRIBE でチャンネルを監視する。
2. PUBLISH でチャンネルに叫ぶ。
3. メッセージは「今」繋がっている人にだけ届く。
このシンプルさこそが、Redisが何十年経ってもエンジニアに愛され続ける理由です。複雑な仕組みを組む前に、まずはこの「情報の掛け渡し」をマスターしてみてください。
ここをクリアできれば、あなたの作るシステムは、ただデータを保存するだけのものから、「ユーザーの操作に即座に反応する、息の通ったアプリケーション」へと進化するはずです。
何か分からないことがあれば、いつでも聞いてください。焦らず、一歩ずつ進んでいきましょう。あなたのエンジニアリングライフが、Redisと共に素晴らしいものになることを願っています。
コメント