やあ、こんにちは!
Redisの奥深い世界へようこそ。伝説のチーフアーキテクトと呼ばれることもある私だけど、今日君に伝えたいのは、Redisの「Pub/Sub(パブサブ)サブシステムの状態を調査するコマンド」についてだ。
「なんだか難しそうな名前だな……」って身構えなくて大丈夫。ここをクリアすれば、Redisの裏側の動きが手に取るようにわかるようになって、君のエンジニアとしての引き出しは確実に一段深くなる。
肩の力を抜いて、僕と一緒に紐解いていこうか。
—
1. Redisの「Pub/Sub」って、日常の何に似ている?
まずはイメージをつかもう。技術の本質は、身近な例えで考えると一瞬で理解できる。
Redisの Pub/Sub(Publish / Subscribe) は、いわば「社内報の定期購読(あるいは新聞配達)」のようなものだ。
- Publish(発行する人):スクープ記事や連絡事項を書き上げて、放送局に持ち込む人。
- Subscribe(購読する人):その放送局のチャンネルを契約していて、記事が届くのを待っている読者たち。
誰かが記事を「パブリッシュ(配信)」すると、そのチャンネルを「サブスクライブ(購読)」している人たち全員の元に、一瞬でその情報が届く。これがPub/Subの仕組みだ。
さて、ここで君がこの「放送局(Redis)」の局長だとしたら、こんな疑問が湧かないかい?
- 「今、世の中にどんなチャンネルが存在しているんだっけ?」
- 「あの特ダネ番組には、今どれくらいのファン(視聴者)がついているんだろう?」
- 「キーワードを指定して聞き耳を立てている人(パターンマッチング)は、何人いるんだ?」
こうした「放送局の裏側の運行状況」をすべて丸裸にして調査するのが、今回テーマにする `PUBSUB`コマンド なんだ。
—
2. 調査の3つの武器:CHANNELS, NUMSUB, NUMPAT
`PUBSUB`コマンドには、状況に応じて使い分ける3つの強力なサブコマンド(子分のようなもの)がいる。ひとつずつ、優しく見ていこう。
① `PUBSUB CHANNELS` :「今、どんなチャンネルがあるの?」
今、世界中でどんなチャンネル名が稼働しているのかを一覧でリストアップしてくれるコマンドだ。
- イメージ:テレビ欄を開いて、現在放送中のチャンネルを全部洗い出す作業。
使ってみよう(CLIの画面をイメージしてね):
現在アクティブな(誰も聞いていなくても、名前が存在している)チャンネルをすべて教えて!
127.0.0.1:6379> PUBSUB CHANNELS
1) “news:sports”
2) “news:weather”
おっ、「スポーツ」と「天気」の2つのチャンネルが現在稼働していることが一目で分かったね。
② `PUBSUB NUMSUB` :「このチャンネル、何人が聴いてるの?」
特定のチャンネルを指定して、「今、何人のリスナーが待機しているか」を正確な人数で教えてくれる。
- イメージ:人気ラジオ番組の「リアルタイム聴取者数」を叩き出すメーター。
使ってみよう:
“news:sports” と “news:weather” のリスナー数を調べて!
127.0.0.1:6379> PUBSUB NUMSUB news:sports news:weather
1) “news:sports”
2) “3” # スポーツのチャンネルには3人がスタンバイ中
3) “news:weather”
4) “12” # 天気はやっぱり人気で12人も見ている!
なるほど、明日の天気が気になる人が多そうだな、なんてことがデータから見えてくるわけだ。
③ `PUBSUB NUMPAT` :「キーワードで聞き耳を立てている人は何人いる?」
ちょっとマニアックだけど超便利な機能に「パターンマッチング(ワイルドカードを使った購読)」がある。例えば `news.` と指定すると、`news:sports` も `news:weather` もまとめて聴くことができるんだ。
このサブコマンドは、そうやって「パターンで広く網を張っている人(パターン・サブスクライバー)の総数」を教えてくれる。
- イメージ:「『ニュース』と名のつく番組なら何でも自動録画する予約」をセットしている世帯の総数。
使ってみよう:
パターンを使って聞き耳を立てている人の「総パターン数」を教えて!
127.0.0.1:6379> PUBSUB NUMPAT
(integer) 2
おや、裏で2つのパターン監視ルールが動いていることが分かったね。
—
3. チーフアーキテクトから贈る、実務での「生きた知見」
ここからが、教科書には載っていない僕からのシークレット・アドバイスだ。
RedisのPub/Subは非常に高速で素晴らしい仕組みなんだけれど、「データが消えても誰も保存してくれない(火消し役がいない)」という大きな特徴がある。
もしメッセージが配信された瞬間に、購読者が1人もいなかったら? そのメッセージは宇宙の彼方へ消え去り、二度と戻ってこない。(Redisはメッセージをストレージに保持せず、その場にいる人に投げたら忘れてしまうからだ)
だからこそ、本番環境でシステムを運用するエンジニアにとって、今回紹介した `PUBSUB` コマンド、特に `NUMSUB` は、「今、本当にメッセージを受け取る準備が整っているか(リスナーがゼロ人じゃないか)」を事前に確認する命綱になるんだ。
「配信したのに誰も聞いていなかった」という悲劇を防ぐために、システムの健康診断としてこれらのコマンドを頭の片隅に置いておいてほしい。
—
おわりに
どうだったかな?
`PUBSUB` の `CHANNELS`、`NUMSUB`、`NUMPAT`。
名前は小難しく見えるけれど、要するに「今のPub/Subの稼働状況を覗き見する窓」に過ぎないんだ。
ここをクリアできれば、Redisの裏側のエコシステムがどう動いているのか、自信を持って語れるようになるはずだよ。
君なら絶対に大丈夫。一歩一歩、確実にエンジニアとしての血肉にしていこう。
さあ、次の扉を開けに行こうか!
コメント