Redis Streams

Redis Streams (Redis Streams)

오늘 배울 주제는 Redis Streams예요. Streams는 이름 그대로 "흐름"처럼 이어지는 데이터, 특히 이벤트 로그나 메시지 스트림을 다룰 때 아주 유용한 데이터 타입이에요. 이 페이지에서는 Streams가 무엇인지, 어떻게 데이터를 넣고 읽는지, 그리고 Consumer Groups(소비자 그룹)을 어떻게 쓰는지 차근차근 설명해 드릴게요.

출처: Redis 공식 문서 — Redis Streams

스트림에서 데이터 가져오기

범위로 질의하기: XRANGE와 XREVRANGE

스트림 항목을 범위로 조회하려면 XRANGEXREVRANGE 명령을 써요. XRANGE는 오름차순으로, XREVRANGE는 내림차순으로 항목을 가져와요. Available in: Redis CLI, C#, Go, Java (동기 - Jedis), JavaScript (Node.js), Python, Ruby, Rust (비동기), Rust (동기)

새 항목 듣기: XREAD

XREAD는 개념적으로 Redis Pub/Sub(채널 구독) 또는 Redis blocking list(키에 새 요소를 기다리는)와 관련 있어 보이지만, 스트림을 소비하는 방식에는 근본적인 차이가 있어요.

  • 여러 소비자에게 fan out(방송)할 수 있다는 점은 Pub/Sub과 비슷해요.
  • Pub/Sub의 메시지는 fire and forget(던져 놓고 잊는)이며 어디에도 저장되지 않아요. 또 blocking list를 쓸 때는 메시지가 클라이언트에 수신되면 리스트에서 popped(사실상 제거)돼요. 반면 Streams는 근본적으로 다르게 동작해요.

Streams의 Consumer Groups는 Pub/Sub이나 blocking list가 달성할 수 없는 수준의 제어를 제공해요. 같은 스트림에 여러 그룹, 처리된 항목의 명시적 확인(acknowledgment), pending 항목 검사, 처리되지 않은 메시지의 claiming(클레임), 그리고 각 소비자별 일관된 기록(history) 가시성이 가능하죠.

소비자 그룹 만들기 (Creating a consumer group)

Redis CLI

> XREADGROUP GROUP italy_riders Alice STREAMS race:italy 0
1) 1) "race:italy"
   2) 1) 1) "1692632639151-0"
         2) 1) "rider"
            2) "Castilla"

Streams 관찰 가능성 (Streams observability)

스트림 상태를 자세히 살펴보고 싶을 때는 XINFO 명령을 써요. XINFO는 스트림이나 소비자 그룹에 대한 정보를 얻기 위해 서브커맨드와 함께 사용하는 관찰(observability) 인터페이스예요.

메시지 소비 전체 지연시간 (Total latency of consuming a message)

이런 명령들의 지연시간을 얘기하는 것은 의미가 없어요. 명령 하나하나의 지연시간보다는 시간 복잡도(time complexity)를 확인하는 것이 더 유용하거든요. 각 명령의 시간 복잡도는 Redis 문서에서 확인할 수 있어요.

더 알아보기 (Learn more)