Database/Redis

[실전 레디스] 2-3. 자료형과 기능: 보조 기능

noahkim_ 2025. 3. 21. 08:56

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.

 

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에 위임