Pub/Sub Introduction

레디스 개발자 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

소개

메시지 보내기, 받기

일반적인 데이터베이스와는 다르게 레디스는 메시지를 주고, 받는 기능을 제공합니다.   Publish 명령으로 보내고, Subscribe 명령으로 받습니다.
통로는 채널(channel)을 이용합니다.   채널은 "SET KEY VALUE"에서 사용하는 'KEY'와 같은 것으로 생각하면 됩니다.
방법은 클라이언트1에서 subscribe channel_name를 실행하고, 클라이언트2에서 publish channel_name "Message"를 실행하면, 클라이언트1에 "Message"가 나옵니다.
레디스의 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을 지원한다.

    • '?'는 한 글자를 대치한다.   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 명령은 서버에 등록된 채널이나 패턴을 조회한다.
세 가지 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 답글이 올라오면 이메일로 알려드리겠습니다.