こんにちは。Redisという大海原へようこそ。
多くのエンジニアがRedisを単なる「高速なキャッシュ」だと思っていますが、実はこれ、「リアルタイム情報のハブ」として使うと真価を発揮します。その代表格が「Pub/Sub(パブサブ)」という仕組みです。
今回は、このPub/Subにおいて、特定の「通知」を受け取るのをやめるためのコマンド『`UNSUBSCRIBE`』について、深掘りしていきましょう。
—
1. Pub/Subを「新聞の購読」でイメージしてみよう
技術用語を並べる前に、日常に置き換えてみましょう。
RedisのPub/Subは、「新聞の購読」にそっくりです。
- Publisher(発行者): 新聞社。記事(メッセージ)を刷って配る。
- Subscriber(購読者): あなた。特定のコーナー(チャネル)を「定期購読」する。
- Channel(チャネル): 「スポーツ欄」「経済欄」といったカテゴリ。
あなたが「スポーツ欄」を購読すれば、スポーツのニュースが届くたびに、あなたの元へリアルタイムに情報が送られてきます。
しかし、もしあなたが「もうスポーツには興味がないな」と思ったら?
そう、「購読解除(UNSUBSCRIBE)」をする必要がありますよね。これをしないと、不要な情報が延々と届き続け、あなたの家の郵便受け(サーバーのメモリ)を圧迫してしまいます。
—
2. UNSUBSCRIBEコマンドの本質
`UNSUBSCRIBE`コマンドは、Redisサーバーに対して「もうこのチャネルの情報は送らなくていいよ」と伝えるための合図です。
使い方はシンプルです。
「sports」というチャネルの購読を解除する場合
UNSUBSCRIBE sports
これだけで、サーバーはあなたをそのチャネルの購読者リストから削除し、以降のメッセージ配信をストップします。
—
3. 解除した時に返ってくる「レスポンス」の正体
ここが初心者の方が少し戸惑うポイントです。Redisはコマンドを実行すると、必ず何らかの「答え(レスポンス)」を返します。
`UNSUBSCRIBE`を叩くと、サーバーは以下のようなデータを送り返してきます。
1) “unsubscribe” # 「解除したよ」という通知の種類
2) “sports” # 解除したチャネルの名前
3) (integer) 0 # 現在、あなたが購読している残りのチャネル数
なぜこの3つの要素が必要なのか?
1. “unsubscribe”: これはシステムからの「了解のサイン」です。「今から解除処理を実行したよ」という報告ですね。
2. “sports”: 「どのチャネルを解除したか」の確認です。複数同時に解除することもできるため、名前が返ってくるのが親切なのです。
3. “0”: これが一番重要です。あなたが「まだ他に購読しているものがあるか」を示しています。もしここが「0」なら、あなたはもうどのチャネルも購読しておらず、接続を安全に閉じることができる状態だ、ということがわかります。
—
4. 知っておくべき「極限の知見」:注意点
最後に、現場で泣きを見ないためのアドバイスを一つ。
RedisのPub/Subにおいて、「購読モード(SUBSCRIBEしている状態)」に入ると、クライアントは他のコマンドをほとんど受け付けなくなります。
初心者の方は、「購読しながら、同時にデータベースの中身も確認しよう!」としがちですが、それはできません。購読中は「ひたすらメッセージを受け取るための専用モード」になるからです。
もし、購読を止めて他のコマンド(GETやSETなど)を使いたいなら、必ず`UNSUBSCRIBE`(または全ての購読を止める`PUNSUBSCRIBE`)を呼び出し、購読チャネル数をゼロに戻す必要があります。
—
まとめ:Redisマスターへの一歩
- Pub/Subは「新聞の購読」と同じ。
- UNSUBSCRIBEは「購読をやめる」という意思表示。
- レスポンスの最後にある数字は「まだ購読が続いている数」。これが0になったら、その接続は自由の身!
どうでしょう、少しイメージが湧きましたか?
Redisは一度仲良くなると、これ以上ないほど頼もしい相棒になります。一つひとつのコマンドの裏にある「なぜこうなっているのか?」という意図を想像する癖をつければ、あなたはもう初心者ではありません。
ぜひ、自分の手で`SUBSCRIBE`して、`UNSUBSCRIBE`して、レスポンスの数字が減っていく様子を観察してみてください。その瞬間に、Redisの鼓動が聞こえてくるはずです。
また分からないことがあれば、いつでも聞きに来てくださいね。応援しています!
コメント