CS/DB

[REDIS] REDIS PUB/SUB 구조

GaGah 2023. 1. 8. 00:56

  REDIS PUB/SUB 기능 소개

Redis는 캐싱 역할 뿐만 아니라 message pub/sub 기능도 가지고 있다.

간단한 채팅을 구현하거나, 하나의 특정 메세지를 여러 사람이 받아야할 때 사용한다. ( 아래의 그림 참고 )

누군가 메세지를 보내게 되면 특정 채널에 구독하고 있는 대상에게 메세지가 전송되는 구조이다.

 

 

🌱  publisher/subsciber

클라이언트는 다른 채널에 구독 또는 구독 취소가 가능하지만, 명령을 실행할 수 없다.

구독 및 구독 취소 작업에 대한 응답은 메세지 형식으로 전송된다.

 

[참고] subscibe한 클라이언트의 컨텍스트에서 허용되는 명령

SUBSCRIBE, SSUBSCRIBE, SUNSUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE, PING, RESET, QIT

 

 

 

🌱 Format of pushed messages

메세지는 3개의 구성을 가지고 있는 Array 응답이다.

 

✅ 메세지 종류에 따라 3가지 구성을 어떻게 갖는지 보자.

첫번째는 메세지의 종류이다.

1) SUBSCRIBE

SUBSCRIBE gaga 1

> "gaga" 채널에 성공적으로 가입했음을 의미

  • 1번째 : 메세지 종류
  • 2번째 : 채널명
  • 3번째 : 구독중인 채널 수

 

 

2) UNSUBSCRIBE

UNSUBSCRIBE gaga 0

> "gaga" 채널에 성공적으로 구독 취소 되었음을 의미

마지막 인수가 0이면 더 이상 어떤 채널에도 가입되어 있지 않으며, 클라이언트는 우리가 Pub/Sub 상태 밖에 있기 때문에 어떤 종류의 Redis 명령도 발행할 수 있다.

  • 1번째 : 메세지 종류
  • 2번째 : 채널명
  • 3번째 : 구독중인 채널 수

 

3) MESSAGE

MESSAGE gaga "test"

> "gaga" 채널에서 "test" 메세지 전송

  • 1번째 : 메세지 종류
  • 2번째 : 발신 채널명
  • 3번째 : 실제 메세지 페이로드

 

⭐ Database & Scoping(범위 지정)

Pub/Sub은 Key space와 관련이 없다. 

데이터베이스 번호를 포함한 어떤 수준에서도 간섭하지 않도록 만들어졌다. (오...)

 

 

Pattern-matching subscriptions

패턴을 통해 구독 또는 구독취소를 할 수 있다.

PSUBSCRIBE news.*
  • news. 으로 시작하는 모든 채널을 구독한다는 의미
PUNSUBSCRIBE news.*

 

  • news. 으로 시작하는 모든 채널 구독 취소한다는 의미

 

PSUBSCRIBE 기능을 통해 구독한 경우, 메세지의 형태는 SUBSCRIBE 로 구독한 경우와 다르게 전송된다. 

MESSAGE -> PMASSAGE로 데이터가 전송된다.

PMESSAGE news.test aa

 

 

 

Q. 만약, 기존에 내가 new.a 를 구독하고 있었는데, 패턴 매칭 구독을 통해 news.a 에 구독이 된다면 어떻게 될까? 

SUBSCRIBE new.a 
SUBSCRIBE new.*

 

A. 2개의 메세지가 전송된다.

MESSAGE news.a study
PMESSAGE news.a study

 

Client library implementation hints

채널에 구독하고 있는 수신자에게 메세지를 보내는데 있어, hash table을 사용한다.

메세지가 수신되면 시간복잡도 O(1)로 조회를 수행하여 메세지를 전달한다. 

 

⭐ 출처

https://redis.io/docs/manual/pubsub/

 

Redis Pub/Sub

How to use pub/sub channels in Redis

redis.io

RESP protocol spec

https://redis.io/docs/reference/protocol-spec/

 

RESP protocol spec

Redis serialization protocol (RESP) specification

redis.io

 

LIST

'CS > DB' 카테고리의 다른 글

[Redis] Redis 서버 실행 및 명령어  (0) 2023.07.09