⭐ 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/
RESP protocol spec
https://redis.io/docs/reference/protocol-spec/
'CS > DB' 카테고리의 다른 글
[Redis] Redis 서버 실행 및 명령어 (0) | 2023.07.09 |
---|