Redis Pub/sub
Redis에서 Publish/Subscribe messaging paradigm을 구현할 수 있도록 해줌
- publisher : 특정 channel로 데이터를 publishing
- subscriber : 한 개 이상의 channel을 구독해 해당 channel로 들어오는 데이터를 받아올 수 있다.
message가 특정 channel로 push되면 해당 channel을 구독한 모든 client에게 데이터가 push된다.
subscriber는 메세지가 published된 순서로 데이터를 받는다.
**RESP2 client**에서는 특정 channel을 subscribe하고 있는 client는 일반적인 명령어를 실행해서는 안 된다.
- pub/sub과 관련된 명령어만 실행
- **RESP3 client**에서는 모든 명령어 실행 가능
Delivery semantics
- redis pub/sub의 전송 전략은 At most once을 사용
- Redis server에서 subsriber에서 메세지를 한번 보내면 다시는 보내지 않는다.
- subscriber가 message를 처리하지 못 하면 메세지가 영원히 유실된다.
- redis에서 메세지가 전송되는 것을 더욱 보장하기 위해서는 Redis streams를 사용
format of pushed messages
subscriber가 받는 message에 종류가 존재
- subscribe : subscribe가 성공적으로 적용됐다는 메세지
- channel 명과 현재 구독 중인 채널의 수를 반환
- unsubscribe : unsubscribe가 성공적으로 적용됐다는 메세지
- channel 명과 현재 구독 중인 채널의 수를 반환
- message : publish 명령어를 통해 데이터가 들어왔다는 메세지
- origin channel 명과 실제 message값을 반환
Pattern-matching subscriptions
glob-style의 pattern을 기반으로 subsribe할 수 있다.
PSUBSCRIBE news.*
다음과 같은 명령어로 pattern 기반으로 unsubscribe할 수도 있다.
PUNSUBSCRIBE news.*
pattern matching으로 들어오는 메세지의 종류는 다르다
- psubscribe
- punsubscribe
- pmessage
만약 client에서 동일한 채널에 대해 subscribe와 psubscribe를 통해 같이 구독하고 있다면, 동일 메세지가 2개 전달된다.
- 한 개는 message, 나머지 한 개는 pmessage로 전달받게 된다.
SUBSCRIBE foo
PSUBSCRIBE f*
Redis Pub/sub vs Redis Streams
Redis pub/sub

- publisher가 메세지를 발행하면 subscriber에게 바로 전달되는 형태
- publisher는 subscriber에 대한 정보를 모름
- subscriber가 메세지를 받지 못 하면 재발행이 불가
- 데이터가 redis에 저장되지 않고, 바로 subscriber로 전달하는 방식
실시간으로 메세지를 많은 구독자에게 전달해야 하는 경우 용이
- ex) 특정 키워드를 알람 등록한 유저에게 푸시 이벤트를 발행해야 하는 경우
간단한 publish/subscribe 시스템을 구축할 때 용이
Redis stream

- log파일처럼 적재되는 Append only 구조
- publisher에 의해 발행된 메세지를 stream에 적재
- 발행된 데이터를 stream에 적재하여 해당 stream id를 구독하는 소비그룹(consumer group)이 해당 stream에 담긴 메세지를 소모
- redis에서 데이터를 저장하고 있는 방식
- redis 5.0 이상부터 지원
redis streams는 실시간 message queues를 구현하거나 event sourcing systems을 구축할 때 용이
또한 신뢰성 있고, 순서가 중요한 event를 처리할 때 중요
기능 차이점
- Redis stream에서는 stream에 쌓여있는 데이터를 이후에 발생한 소비그룹에서 소모할 수 있다.
- pub/sub에서의 휘발성 문제 해결 가능
- redis stream에서 해당 stream에 대한 다중 소비그룹이 있다면 분산 처리가 가능
- redis pub/sub에서는 모든 구독자에게 메세지가 발행되므로 분산 처리가 어렵다.
[Redis]Redis Pub/Sub과 Redis Stream의 차이점
Redis Streams와 Apache Kafka: 두 데이터 스트리밍 시스템 비교
'Redis(레디스)' 카테고리의 다른 글
| Redis Sentinel (1) | 2023.12.10 |
|---|---|
| Redis client-side caching (1) | 2023.12.10 |
| Redis pipelining (0) | 2023.12.10 |
| Redis Transaction (1) | 2023.12.10 |
| Redis 데이터 타입 정리 (1) | 2023.12.10 |