TIL

6장 레디스를 메시지 브로커로 사용하기

메시징 큐와 이벤트 스트림

메시징 큐와 이벤트 스트림의 차이

레디스를 메시지 브로커로 사용하기

fire-and-forget - 비동기 프로그래밍에서 사용되는 디자인 패턴. 작업 실행 후 그 결과에 대한 처리가 필요하지 않은 경우 유용하다. 신뢰성이 필요한 경우엔 사용하지 않아야 한다. ex) 로깅, 이벤트 발행, 통계 데이터 수집 등.

레디스의 pub/sub

메시지 publish하기

> PUBLISH hello world
(integer) 1

메시지 구독하기

> SUBSCRIBE event1 event2
Reading messages...
1) "subscribe"
2) "event1"
3) (integer) 1
1) "subscribe"
2) "event2"
3) (integer) 2

클러스터 구조에서의 pub/sub

sharded pub/sub

레디스 list를 메시징 큐로 사용하기

list의 EX 기능

list의 블로킹 기능

# 데이터가 입력될 때까지 5초 동안 대기
> BRPOP queue:a 5
1) "queue:a"
2) "data"

list를 이용한 원형 큐

> LPUSH clist A
(integer) 1

> LPUSH clist B
(integer) 2

> LPUSH clist C
(integer) 3

> LRANGE clist 0 -1
1) "C"
2) "B"
3) "A"

# clist에서 RPOP해서 clist에 LPUSH
> RPOPLPUSH clist clist

> LRANGE clist 0 -1
1) "A"
2) "C"
3) "B"

Stream

레디스의 Stream과 아파치 카프카

스트림이란?

데이터의 저장

# '*'은 레디스가 자동으로 생성하는 타임스탬프 ID를 사용하겠다는 것을 의미
# Email stream에 subject 키에 first, body 키에 hello? 값을 저장
> XADD Email * subject "first" body "hello?"
"1659114481311-0" # ID 반환

소비자

소비자 그룹

ACK와 보류 리스트

메시지의 재할당

메시지의 자동 재할당

메시지의 수동 재할당

stream 상태 확인