RedisのPub/Subがどういうものか理解してない人がいたら実際にRedisのコマンドラインを使って動作を行なってみましょう。そうすればきっと理解できるはず。

Laravel Broadcastingの動作確認を行なっている時に調べた内容です。

RedisでPub/Subを理解

PubはPublish(パブリッシュ)の略でSubはSubcribe(サブスクライブ)の略で、日本語ではPublishは発行する、Subscribeは購読するという意味になります。

RedisのPub/Subを理解するのにもう一つ重要なChannelというものが存在することをまず知っておく必要があります。Channelは両端に人がいる糸電話のイメージを持ってもらってもいいかと思います。

Publish, Subscribe, Channelの関係がわかればRedisのPub/Subを理解することができます。

早速ですが、身近な例とRedisのコマンドを組み合わせながら説明していきたいと思います。

Publish(er)は出版社という意味があるのでPublish(er)を日本経済新聞社とします。Subscribe(r)は私たち購読者です。日本経済新聞では日経新聞以外にも日経ヴェリタス、日経産業新聞、日経MJなどを発行しています。これらの新聞をChannelとします。この関係を使いながらRedisを使って説明していきます。

その前にRedisがインストールされていなければ下記の文書を参考にインストールを行なってください。(MAC or Ubuntuの場合)

インストールが完了したら、Redisサーバを起動します。


$ redis-server

ある人は投資金融情報に興味があるので、日経ヴェリタスチャネルを購読します。そのチャネル名をveritasとします。

新しく端末を起動して、redis-cliコマンドを実行し、veritas(日経ヴェリタス)をSUBSCRIBE(購読)します。これでveritasを購読したことになります。


$ redis-cli
127.0.0.1:6379> SUBSCRIBE veritas
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "veritas"
3) (integer) 1

ある人は最近のトレンドに興味があるので日経MJを購読します。日経MJのチャネル名はmjとします。

別の端末を起動してredis-cliコマンドを実行し、mj(日経MJ)をSUBSCRIBE(購読)します。


127.0.0.1:6379> SUBSCRIBE mj
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mj"
3) (integer) 1

日本経済新聞社は投資金融情報の記事が作成できたので、veritasチャネルを使って購読者に情報を送信します。

PUBLISHコマンドでチャネルを使って情報を送信します。情報の内容はnext unicorn company(次のユニコーン企業)についての記事です。


127.0.0.1:6379> PUBLISH veritas 'next unicorn company'
(integer) 1

PUBLISHされた情報は、veritasチャネルを購読している人のみ受け取ることができます。購読している人は情報を取りに行くではなく新聞が毎朝ポストに届くように自動で情報が届きます。しかし、mjチャネルを購読している人にはこの情報は届けられないので新しい情報が送信されたこともわかりません。


1) "message"
2) "veritas"
3) "next unicorn company"

ある人は投資にも最近のトレンドにも興味があるので、どちらのチャネルも購読します。


~ $ redis-cli
127.0.0.1:6379> SUBSCRIBE veritas mj
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "veritas"
3) (integer) 1
1) "subscribe"
2) "mj"
3) (integer) 2

今度は日本経済新聞社はトレンド情報の記事が作成できたので、mjチャネルを使って購読者に情報を送信します。内容はWhen tapioca boom finish?(いつタピオカブームは終わるのか?)


127.0.0.1:6379> PUBLISH mj 'When tapioca boom finish?'
(integer) 2

mjチャネルに送られたメッセージはmjの購読している人のみ受け取ることができます。ここでは3人中2人がmjを購読しているので、mjを購読している人だけ自動で情報を受け取れます。


1) "message"
2) "mj"
3) "When tapioca boom finish?"

新聞社を使って説明を行いましたが、実際にRedisを使って説明を行うことができました。Pub/Subという単語であまり説明がなければ意味を理解するのが難しいですが、身近な例を使えばRedisのPub/Subが非常にシンプルなものだということがわかっていただけたかと思います。。