redis, pub/sub
redis pub sub
Messaging Queue 의 메시징 패턴 중 하나이다. 채팅 시스템, 푸시 알림 시스템, 구독 시스템과 같은 시스템에서 사용된다.
redis 의 경우, 메시지를 pub 쪽에 저장하지 않기에, subscriber 가 존재하지 않는다면 메시지는 그대로 유실된다. 즉, 메시지에 대한 수신 확인을 보장하지 않는다는 것이다.
topic
publisher 를 subscriber 가 구독하는 순간 topic (채널) 이 생성된다. 특정 topic 을 구독하는 여러 subscriber 들이 존재할 수 있다. subscriber 는 여러 채널을 구독할 수 있으니 채널과 subscriber 는 다대다 관계이다.
실제 코드 참고
1
2
3
4
5
6
/* 메시지 생산
*/
int pubsubPublishMessage(robj *channel, robj *message) {
...
}
로직
- 클라이언트 수 초기화,
- 주어진 채널에 대한 구독자 목록 탐색
- 구독자가 있는 경우, 클라이언트에게 메시지 전송
- 패턴 딕셔너리 탐색으로, 클라이언트 탐색
- 클라이언트에게 메시지 전달
- 메시지를 받는 클라이언트 수 반환
정리
- redis pub/sub 은 redis 서버를 매개로 해서, 클라이언트 간 통신을 시켜준다.
- redis 클라이언트는 redis 서버 내 ‘채널’ 을 생성할 수 있다.
- 메시지를 수신하고자 하는 클라이언트(subscriber)는 해당 채널의 메시지를 subscribe 할 수 있다.
- 메시지를 전송하고자 하는 클라이언트(publisher)는 해당 채널에 메시지를 publish 할 수 있다
- 메시지를 publish 하는 순간에, subscribe 하는 클라이언트만 메시지를 수신하고, 메시지는 유실된다.
실무에 적용된 레퍼런스
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.