Redis Pub/Sub
Redis Pub/Sub(Publish/Subscribe)는 Redis에서 제공하는 메시징 시스템으로, 발행자(Publisher)가 메시지를 특정 채널에 발행하고, 구독자(Subscriber)는 해당 채널을 구독하여 메시지를 수신하는 방식입니다.
이 방식은 비동기적 통신을 가능하게 하며, 발행자와 구독자가 서로 직접적으로 통신하지 않고, Redis가 중간에서 메시지를 라우팅하는 역할을 합니다.
Redis Pub/Sub 동작 방식
Publisher (발행자)
발행자는 특정 채널로 메시지를 보냅니다.
발행자는 메시지를 보낼 때 구독자가 있는지 여부를 알 필요가 없습니다.
여러 구독자가 있으면, 같은 채널을 구독한 모든 구독자에게 메시지가 전송됩니다.
Subscriber (구독자)
구독자는 하나 이상의 채널을 구독하여, 해당 채널에서 발행된 메시지를 실시간으로 수신합니다.
구독 중인 채널에서 발행된 메시지를 실시간으로 수신할 수 있으며, 다수의 구독자가 같은 채널을 구독할 수 있습니다.
Channel (채널)
채널은 발행자와 구독자가 연결되는 중간 통로입니다. 발행자는 특정 채널로 메시지를 발행하고, 구독자는 해당 채널을 구독하여 메시지를 받습니다.
패턴 기반 구독도 가능하여, 특정 패턴과 일치하는 모든 채널을 구독할 수 있습니다.
Redis (메시지 브로커)
Redis는 발행자와 구독자를 연결하는 메시지 브로커 역할을 합니다.
발행자는 메시지를 Redis에 보내고, Redis는 해당 메시지를 구독 중인 모든 구독자에게 전달합니다.
Redis Pub/Sub 명령어
메시지 발행 (PUBLISH)
PUBLISH <channel> <message>: 지정된 채널에 메시지를 발행합니다.
PUBLISH news_channel "Breaking news!"
메시지 구독 (SUBSCRIBE)
SUBSCRIBE <channel>: 특정 채널을 구독합니다. 구독자는 해당 채널에서 발행된 모든 메시지를 수신합니다.
SUBSCRIBE news_channel
패턴 기반 구독 (PSUBSCRIBE)
PSUBSCRIBE <pattern>: 특정 패턴에 해당하는 채널들을 한 번에 구독합니다. 패턴 구독은 와일드카드를 사용하여 다수의 채널을 구독할 수 있습니다.
PSUBSCRIBE news_*
구독 취소 (UNSUBSCRIBE / PUNSUBSCRIBE)
특정 채널의 구독을 중단합니다.
UNSUBSCRIBE <channel>
패턴 구독을 중단합니다.
PUNSUBSCRIBE <pattern>
예시
발행자(Publisher) 측
이 명령은 news_channel 채널에 "Breaking news!" 메시지를 발행합니다.
news_channel을 구독하고 있는 모든 구독자에게 메시지가 전달됩니다.
PUBLISH news_channel "Breaking news!"
구독자(Subscriber) 측
이 명령은 news_channel을 구독하게 하며, 해당 채널에서 발행되는 모든 메시지를 수신합니다.
SUBSCRIBE news_channel
패턴 구독
이 명령은 news_로 시작하는 모든 채널을 구독합니다. 예를 들어, news_channel, news_sports 등의 채널에서 발행된 메시지를 모두 수신하게 됩니다.
PSUBSCRIBE news_*