하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.
1. Pub/Sub
- 발행자가 구독자에게 메시지를 보내는 패턴
- 자료형이 아닌 기능 형태로 제공됨
요소
구독자
- 관심있는 주제에 대해 하나 이상의 채널을 구독할 수 있음
발행자
- 특정 채널을 지정하여 이 채널을 통해 메시지를 발행함
명령어
구독
subscribe mychannel1
unsubscribe mychannel1
psubscribe my*
punsubscribe my*
ssubscribe shd1
sunsubscribe shd1
- ssubscribe: 샤드 ID로 구독
발행
publish mychannel1 "Hello, World!"
spublish shd1 "Hello, World!"
- spublish: 샤드 ID로 발행
상태 확인
pubsub channels
pubsub numsub
pubsub numpat
pubsub shardchannels
pubsub shardnumsub
- numpat: 패턴으로 구독한 채널 개수
2. Redis Stream
- 강력한 메시지 처리 기능 제공
- 로그 데이터 모델링 및 스트림 작업에 사용됨
- kafka와 비슷한 개념
내부 구조
- RAX 기반 트리형 자료구조
- listpack 사용 (ziplist 대체, 메모리 효율 개선)
특징
- 구조화된 데이터 저장 (각 엔트리에 여러 필드를 가짐)
- 범위 조회 가능 (엔트리 ID 및 유닉스 시간 기반)
- 대량의 연속적인 데이터 처리에 최적화
쿼리 모드
메시징 시스템
- 스트림 메시지를 여러 Consumer에 전달함
시계열 데이터
- 커서 기반
- 시간 범위 조회
Consumer Group
메시지 할당 및 처리
- Consumer가 특정 엔트리를 할당받아 처리
- Consumer가 정상적으로 처리했는지 확인 가능
논리적 파티셔닝
- 동일 그룹 내 Consumer들은 파티션으로 나뉨
- 각 파티션 내 Consumer만 메시지 처리 가능
메시지 분산 처리
- Consumer Group 내에서 메시지를 자동으로 분배
- 하나 이상의 Consumer로 분산 처리 가능
스케일 아웃
- 하나의 스트림에 할당할 여러 Consumer Group 생성 가능
- 여러 Consumer가 병렬로 작업 분할 및 처리 가능
vs Kafka
- Kafka: 메시지를 파티션으로 나누어 관리
- Redis Stream: Consumer의 상태 기반으로 논리적 파티션 구현
vs Pub/Sub
Pub/Sub 단점
- 구독하지 않는 동안 메시지 손실 발생 가능성 존재
- 네트워크 장애 시 재시도하는 동안 메시지 손실 가능
Redis Stream 장점
- 메시지 이력 유지
- 개별 데이터 수신을 놓치지 않음
명령어
등록
xadd mystream * name Taro age 32 message "Hello, World!"
xadd mystream * name Jiro age 26 message "Hello, Taro"
xadd mystream * name Saburo age 30 message "Hello, Jiro"
삭제
xdel mystream 1742539535323-0
xtrim mystream maxlen 2
- xtrim: 조건에 맞게 현재 스트림 메시지 갯수를 지정
읽기
xrange mystream - +
xrange mystream 1742539498848 1742539518712
xrevrange mystream + -
xread count 2 streams mystream 0
xread block 5000 streams mystream
xlen mystream
xinfo stream mystream
- xinfo: 스트림의 메타데이터 및 상세정보 출력
Consumer Group 제어
xgroup create mystream mygroup 0 mkstream
xgroup destroy mystream mygroup
xgroup createconsumer mystream mygroup consumer1
xgroup delconsumer mystream mygroup consumer1
Consumer Group 읽기
xreadgroup group mygroup consumer1 count 2 streams mystream 1742539498848-0
xreadgroup group mygroup consumer1 count 2 streams mystream >
- 특정 ID or 읽지 않은 메시지 (>) 선택 가능
Consumer Group 메시지 처리
xack mystream mygroup 1742539498848-0
xpending mystream mygroup
- xack: 메시지를 처리 하기
- xpending: 아직 처리되지 않은 메시지 목록과 통계 확인
메시지 위임
xclaim mystream mygroup consumer2 60000 1742539518712-0
xautoclaim mystream mygroup consumer2 60000 1742539518712-0 count 2
- xclaim: 엔트리 소유권을 같은 그룹의 특정 Consumer에 위임 (해당 엔트리의 누적된 idle-time을 만족하는 조건을 셋팅할 수 있음)
- xautoclaim: 시간 만료된 엔트리 소유권을 자동적으로 다른 Consumer에 위임
'Database > Redis' 카테고리의 다른 글
[실전 레디스] 3-2. 고급 기능: 루아 (0) | 2025.03.21 |
---|---|
[실전 레디스] 2-4. 자료형과 기능: 공통 명령어 (0) | 2025.03.21 |
[실전 레디스] 2-2. 자료형과 기능: 보조 자료형 (0) | 2025.03.20 |
[실전 레디스] 2-1. 자료형과 기능: 기본 자료형 (0) | 2025.03.20 |
[실전 레디스] 1. 레디스의 시작 (0) | 2025.03.19 |