Redisのpub/subを使う。

Redisにpub/subという便利そうな機能があったので使ってみました。

pub/subで他のプロセスに通知を送れる

pubというのはPublishのことで、subというのはSubscribeのことです。発行と購読とでも訳せばいいんでしょうか。
まず、Redisに「Subscribe(購読)します」と事前に宣言しておきます。続いて、Redisに対して「HogeHogeをPublish(発行)します」と誰かが言うと、すぐにSubscribeしている全てのプロセスに通知が発行されます。

何か更新があった際に、他のプロセスや他のサーバに簡単に通知を送れるので、いろいろと使い道は多そうです。

Node.jsからRedisを使えるようにする。

npmでredisのパッケージをインストールし、Node.jsからRedisを使えるようにします。

$ npm install redis
npm http GET https://registry.npmjs.org/redis
npm http 200 https://registry.npmjs.org/redis
npm http GET https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
npm http 200 https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
redis@0.8.1 ../node_modules/redis

簡単です。

Subscriber(購読者)の設定

続いて、Node.jsで、testチャネルをsubscribeするように設定します。

var subscriber = require('redis').createClient(6379, 'localhost');
subscriber.subscribe('test');
subscriber.on('message', function(channel, message) {
	console.log('channel: ' + channel + ', message: ' + message);
});

これをsubscriber.jsと名付けて、実行しておきます。

$ node subscriber.js

これで、Redisのtestチャネルにpublishされると、その内容がログ出力されるようになります。

コマンドラインでRedisに対してpublishする

今回はpub/subを試してみるのが目的なので、別のターミナルからRedisのコマンドラインツールを叩きます。testチャネルに対して、HelloとかKONNICHIWAとかテキトーにpublishします。

$ redis-cli publish 'test' 'Hello!'
(integer) 1
$ redis-cli publish 'test' 'KONNICHIWA!'
(integer) 1

すると、subscriberのNode.js側では、それを受けて内容がログ出力されます。

$ node subscriber.js
channel: test, message: Hello!
channel: test, message: KONNICHIWA!

publishした瞬間にsubscriberに通知、publishした瞬間にsubscriberに通知・・・という動きを見ることができます。
これはなかなか楽しいし、使い道が色々考えられますね!

コメント

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