본문 바로가기
Data/Redis

[Redis] Pub/Sub

by dev_ss 2023. 7. 19.

 

1. Pub(Publish) / Sub(Subscribe) :

 

Pub / Sub이란, 특정 채널에 메시지를 발행하는 발행자와 해당 채널을 구독하여 메시지를 수신하는 구독자로 구성되어 있다.

 

발행자가 메시지를 발행하게 되면 해당 채널을 구독하는 모든 사용자들이 메시지를 받을 수 있다는 특징을 가지고 있으며, 그 예시로 카카오톡 단체 채팅방을 들 수 있는데, 한 사람이 메시지를 쓰면 모든 사람이 해당 메시지를 읽을 수 있는 점이다.

 

발행자는 어떤 사용자가 구독을 한지 모르고 채널에 메시지를 발행하기만 하고, 구독자는 채널에 발행된 메시지를 가져오기만 하기 때문에, 발행자와 구독자가 서로 분리가 되어서 상호 상태에 대하여 알지 못한다는 특징도 가지고 있다.

 

Redis에서 Pub/Sub은 비동기 처리로 메시지를 발행하고 메시지 구독자가 메시지를 수신한 것을 확인하지 않기 때문에 메시지의 유실이 발생할 수 있다.

 

  • Pub/Sub의 구조로 메시지를 전달하는 브로커는 대표적으로 Kafka와 Redis가 있다.

 

 

2. Redis-cli 명령어 :

 

1) subscribe : 채널을 구독하고 메시지를 수신

# Redis-cli
subscribe [채널 이름]

# 다수 채널 가능
subscribe [채널 이름1] [채널 이름2] [채널 이름3] ...

 

2) publish : 채널에 메시지를 발행

# Redis-cli
publish [채널 이름] [메시지]

 

3) psubscribe : 패턴을 기반으로 채널을 구독

# Redis-cli
psubscribe [패턴]

# glob-style 지원
# hello / hallo / hbllo / hcllo ... 등 구독
psubscribe h?llo

# hllo / haaallo ... 등 h로 시작하고 llo로 끝나는 모든 채널 구독
psubscribe h*llo

# hallo / hello의 대괄호 안의 문자열이 해당되는 채널을 구독 (haello는 X)
psubscribe h[ae]llo

 

4) unsubscribe : 구독한 채널의 구독을 해제

# Redis-cli
unsubscribe [채널 이름]

# 다수 채널 가능
unsubscribe [채널 이름1] [채널 이름2] [채널 이름3] ...

 

5) punsubscribe : 패턴을 기반으로 채널의 구독 해제

# Redis-cli
punsubscribe [패턴]

# glob-style 지원
# hello / hallo / hbllo / hcllo ... 등의 해당 패턴의 모든 채널 구독 해제
punsubscribe h?llo

# hllo / haaallo ... 등 h로 시작하고 llo로 끝나는 해당 패턴의 모든 채널 구독 해제
punsubscribe h*llo

# hallo / hello의 대괄호 안의 문자열이 해당되는 채널을 구독 해제(haello는 X)
punsubscribe h[ae]llo

 

6) pubsub channels : Redis의 활성화된 채널을 패턴을 이용하여 조회

# Redis-cli
pubsub channels [패턴]

# glob-style 지원
# hello / hallo / hbllo / hcllo ... 등의 해당 패턴의 모든 채널 조회
pubsub channels h?llo

# hllo / haaallo ... 등 h로 시작하고 llo로 끝나는 해당 패턴의 모든 채널 조회
pubsub channels h*llo

# hallo / hello의 대괄호 안의 문자열이 해당되는 채널을 조회(haello는 X)
pubsub channels h[ae]llo

 

7) pubsub numsub : 해당 채널을 구독하고 있는 수를 조회

# Redis-cli
pubsub numsub [채널 이름]

# 다수 채널 가능
pubsub numsub [채널 이름1] [채널 이름2] [채널 이름3]

 

 

 

반응형

'Data > Redis' 카테고리의 다른 글

[Redis] Redis-cli 기본 명령어  (0) 2023.07.11
[Redis] Redis란  (0) 2023.07.09