Pub/Sub Introduction

Redis 開発者教育の申込 Redis 定期点検/技術サポート
Redis Technical Support
Redis エンタープライズサーバー
Redis Enterprise Server

紹介

メッセージの送信、受信

一般的なデータベースとは違い、Redis はメッセージを送り、受ける機能を提供します。   Publish コマンドで送り、Subscribe コマンドで受けます。
通路はチャネル(channel)を使います。   チャネルは "SET KEY VALUE" で使う 'KEY' と同じものと考えてください。
方法はクライアント1で subscribe channel_name を実行し、 クライアント2で publish channel_name "Message" を実行すると、 クライアント1に "Message" が出ます。
Redis の Pub/Sub システムはメッセージを保管(queuing)しません。   Publish する時点ですでに実行した subscribe コマンドで待機している クライアントにだけ配信されます。

これからコマンドをひとつずつ見ていきます。

コマンド説明

SUBSCRIBE channel [channel ...]

指定したチャネルに送られたメッセージを受けます。   チャネルを複数指定できます。

    6379> subscribe ch01 ch02
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "ch01"
    3) (integer) 1
    1) "subscribe"
    2) "ch02"
    3) (integer) 2

ほかのクライアントで PUBLISH ch01 "Hello!" コマンドでメッセージを送ると、 次のように受けます。

    1) "message"
    2) "ch01"
    3) "Hello!"

PSUBSCRIBE pattern [pattern ...]

チャネルをパターンで登録します。パターンを複数登録できます。
パターンは次のような glob-style をサポートします。

    • '?' は1文字を置き換えます。   h?llo は hello, hallo, hxllo のようなものを意味します。
    • '*' は空または複数文字を置き換えます。   h*llo は hllo, heeeello のようなものを意味します。
    • h[ae]llo は 'a' または 'e' だけ来られます。   そのため hello, hallo はでき、hillo はできません。

パターン登録コマンドの例

    6379> psubscribe ch*
    Reading messages... (press Ctrl-C to quit)
    1) "psubscribe"
    2) "ch*"
    3) (integer) 1

ほかのクライアントで PUBLISH ch01 "Hello! AlphaGo" コマンドでメッセージを送ると、 次のように受けます。

    1) "pmessage"
    2) "ch*"
    3) "ch01"
    4) "Hello! AlphaGo"

UNSUBSCRIBE [channel [channel ...]]

SUBSCRIBE で登録したチャネルを削除し、これ以上メッセージを受けません。
チャネル名を入力しなければ、そのクライアントに登録されたすべてのチャネルを削除します。
入力すれば入力したチャネル名だけ削除します。
redis-cli では Ctrl-C で終了します。

    6379> unsubscribe ch*
    1) "unsubscribe"
    2) "ch*"
    3) (integer) 1

PUNSUBSCRIBE [pattern [pattern ...]]

PSUBSCRIBE で登録したパターンを削除し、これ以上メッセージを受けません。
パターン名を入力しなければ、そのクライアントに登録されたすべてのパターンを削除します。
入力すれば入力したパターン名だけ削除します。
redis-cli では Ctrl-C で終了します。

    6379> punsubscribe ch*
    1) "punsubscribe"
    2) "ch*"
    3) (integer) 1

PUBLISH channel message

メッセージを指定したチャネルに送ります。
メッセージを受けるクライアント数を返します。

    6379> publish ch01 "Hello! AlphaGo"
    (integer) 1

PUBSUB subcommand [argument [argument ...]]

PUBSUB コマンドはサーバーに登録されたチャネルやパターンを照会します。
3つの subcommand があります。   channels, numsub, numpat です。
channels, numsub はチャネル関連コマンドで、 numpat はパターン関連コマンドです。

PUBSUB channels [pattern]

Pattern を入力しなければ、そのサーバーに登録されたすべてのチャネル名を表示します。
ここでの pattern は psubscribe で登録した pattern ではなく、チャネル名を glob-style で探すものです。
登録した pattern を表示するものではありません。
クライアントで同じ名前のチャネルを何度登録しても、このコマンドでは一度だけ表示します。

    6379> pubsub channels
    1) "ch01"
    2) "ch02"

PUBSUB numsub [channel-1 ... channel-n]

該当チャネルに登録されたクライアント個数を表示します。
PUBSUB channels で確認したチャネルそれぞれに何個のクライアントが接続しているかを表示します。

    6379> pubsub numsub ch01 ch02
    1) "ch01"
    2) (integer) 3
    3) "ch02"
    4) (integer) 1

PUBSUB numpat

サーバーに登録された pattern の個数を表示します。

    6379> pubsub numpat
    (integer) 3

Clients for Java Jedis, Lettuce, Redisson
Clients for C Hiredis

<< BITPOS Pub/Sub Intro Redis Config & Pub/Sub >>

Email 返事がかかってなれば、メールでお知らせします。