레디스의 PUBSUB에 대한 실습을 기록한다.
Publish / Subscribe 란 특정한 주제(topic)에 대하여 해당 topic을 구독한 모두에게 메시지를 발행하는 통신 방법으로 채널을 구독한 수신자(클라이언트) 모두에게 메세지를 전송 하는것
특징 : 채널을 구독하는 모든 클라이언트에게 메시지를 전달한다. 하지만 해당 메시지를 정상 수신하였는지는 확인하지 않는다.
--> 전송 보장을 하지 않는다.
또한 따로 수신받은 메시지를 메모리에 저장하지 않는다.

그림과 같이 발행자와 구독자는 중간에 redis를 통해 연결되어 진다.
PUBSUB 실습

1,2 번창은 ch1을 구독하고 있는 상태에서 3번창에서 메시지를 발행했을때 정상적으로 수신되는 것을 확인 할 수 있다.
Redis는 기본적으로 채널을 기반으로 하는 브로드캐스트 (모두에게 전송)이므로 특정 클라이언트에게만 전송을 할 수 없다.
애초에 Redis는 구독자 정보를 가지고 있지도 않는다.
특정 클라이언트에게만 전송하고 싶다면 전용채널을 구독하던가 아니면 Redis Streams 또는 MQ 도입 (Kafka, RabbitMQ 등)
의 방법을 취하면 된다. (해당 주제는 여기서랑은 상관없으므로 PASS)
pubsub 명령어
1. PUBSUB CHANNELS : 현재 존재하는 활성화된 채널 목록 반환

보다시피 CH1 이 활성화 목록에 속해있는 것을 볼 수 있다.
2. PUBSUB NUMSUB 채널명 : 채널별로 구독자 수 확인 가능

ch1 이라는 채널을 2개의 클라이언트가 접속해 있다.
3. unsubscribe / punsubscribe 명령어
기본적으로는 컨트롤+c 로 하면 종료되지만 별도 클라이언트라면 아래와 같은 명령어로 구독취소를 할 수 있다.
* 기본 구독 해제 : UNSUBSCRIBE ch1
* 여러 채널 구독 해체 : UNSUBSCRIBE ch1 ch2 ch3
* 전체 채널 해제 : UNSUBSCRIBE
패턴 기반(PUB/SUB)
이름의 패턴을 통한 구독 및 구독해제 관련 명령어들이 있다.
- PSUBSCRIBE 패턴
EX : PSUBSCRIBE user:* -- user:로 시작하는 모든 채널 구독
- PUNSUBSCRIBE 패턴
EX : PUNSUBSCRIBE user:* -- 특정 패턴 구독 해제
- PUBSUB CHANNELS user:* -- 특정 패턴에 해당하는 채널 목록
'DB > redis' 카테고리의 다른 글
| [발표용] Redis (0) | 2026.04.02 |
|---|---|
| [Redis] 분산락 (0) | 2025.12.15 |
| [Redis] Redis Replication, Sentinel (Spring Boot) (0) | 2025.03.14 |
| Redis (0) | 2025.03.14 |