RedisインストールからPub/Sub機能を使うまで

Redisとは?

Redisは、データ構造サーバーを実装するオープンソースソフトウェアプロジェクトである。いわゆるNoSQLデータベースの一つであり、Redis Labs(英語版)がスポンサーとなって開発されている。ネットワーク接続されたインメモリデータベースでかつキー・バリュー型データベース(英語版)であり、オプションとして永続性を持つ。*1

一言で説明すると、Redisはオープンソースインメモリデータストア。データベースやキャッシュ、メッセージブローカーとして利用されている。*2

github.com

Pub/Sub (Publish/Subscribe) とは?

日本語では出版-購読型モデルとも呼ばれる。

非同期メッセージングパラダイムの一種であり、メッセージの送信者(出版側)が特定の受信者(購読側)を想定せずにメッセージを送るようプログラムされたものである。出版されたメッセージにはクラス分けされ、購読者に関する知識を持たない。購読側は興味のあるクラスを指定しておき、そのクラスに属するメッセージだけを受け取り、出版者についての知識を持たない。出版側と購読側の結合度が低いため、スケーラビリティがよく、動的なネットワーク構成に対応可能である。*3

Installing Redis

$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ cd redis-stable
$ make

make完了後、redis-stable/src/ に様々な実行可能ファイルが生成される。 今回は、redis-server, redis-cli を利用する。

  • redis-server is the Redis Server itself.
  • redis-sentinel is the Redis Sentinel executable (monitoring and failover).
  • redis-cli is the command line interface utility to talk with Redis.
  • redis-benchmark is used to check Redis performances.
  • redis-check-aof and redis-check-dump are useful in the rare event of corrupted data files.

Pub/Sub機能を試す

  1. Redis サーバを起動する
  2. クライアント1 で、channel ‘foo’ を subscribe する
  3. クライアント2 で、subscribeされている channel ‘foo’ に対して message ‘hello world!’ を publish する

step1. start redis server

$ ./src/redis-server
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: xxxx
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

でっかいロゴが出てきた。

step2. クライアント1で channel ‘foo’ を subscribe する

[client 1]

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

step3. クライアント2 で、message ‘hello world!’ を publish する

[client 2]

$ ./src/redis-cli
127.0.0.1:6379> PUBLISH foo 'hello world!'
(integer) 1
127.0.0.1:6379>

publishすると、client 1のスクリーン上に以下のようにメッセージ ‘hello world!’ が表示される

[client 1]

1) "message"
2) "foo"
3) "hello world!"

references

refered to the Redis Quick Start – Redis