Skip to content

데이터 타입 (Data Types)

개요

Redis가 단순 키-값 저장소만은 아니라고 하는 이유가 이 데이터 타입들이에요. Redis는 문자열뿐 아니라 List·Hash·Set·Sorted Set 같은 자료구조를 기본 타입으로 제공해서, 큐·랭킹·태그 같은 패턴을 한 번의 명령으로 처리하게 해줘요. 자료구조를 애플리케이션 코드로 짜는 대신 Redis가 직접 들고 있으니, 빠르고 일관된 동작을 얻을 수 있어요.

핵심 개념

Strings — 가장 기본

Redis 문자열은 바이트의 연속을 나타내는 가장 기본 타입이에요. 대부분의 명령이 O(1)로 매우 효율적이에요. 단일 문자열은 기본적으로 최대 512MB까지 저장할 수 있어요.

INCR/INCRBY처럼 값을 원자적으로 증가시키는 카운터도 문자열이에요. 여러 클라이언트가 동시에 값을 읽고 올려도 Redis가 그 연산을 원자적으로 처리해, 최종 값이 항상 정확해요. rate limit 같은 카운터 패턴의 기반이죠.

Lists — 순서가 있는 문자열 목록

List는 삽입 순서대로 정렬된 문자열 목록이에요. 왼쪽/오른쪽 끝에서 요소를 넣고 빼는 연산(LPUSH/RPOP)은 O(1)이에요. 양쪽 끝을 쓰는 특성 덕에 큐(queue, FIFO)스택(stack, LIFO)을 쉽게 만들 수 있어요. 최대 길이는 2^32 - 1개예요.

Hashes — 필드-값 맵

Hash는 필드와 값의 맵이에요. 객체처럼 여러 속성을 가진 데이터를 담기 좋아요. HSET로 필드를 넣고 HGET으로 읽어요. 대부분의 명령이 O(1)이고, 최대 2^32 - 1개의 필드-값 쌍을 저장할 수 있어요. 사용자 프로필처럼 속성이 여럿인 데이터를 하나의 키에 담을 때 잘 맞아요.

Sets — 중복 없는 집합

Set은 유일한(중복 없는) 문자열의 모임이에요. SADD로 추가하고 SISMEMBER로 멤버십을 O(1)로 확인해요. 집합 연산인 교집합(SINTER), 합집합(SUNION), 차집합(SDIFF)을 지원해서 "여러 그룹에 공통으로 속한 사용자" 같은 질의를 한 명령으로 처리할 수 있어요.

Sorted Sets — 점수로 정렬된 집합

Sorted Set은 각 문자열이 점수(score)와 연결되어 그 점수로 정렬되는 집합이에요. ZADD로 추가하고 ZRANGE로 순위 범위를 읽어요. 대부분의 연산이 O(log n)이에요. 리더보드(랭킹)의 전형적인 구현이죠 — 점수가 바뀌면 순위가 재정렬돼요.

실제 적용 (데이터스케쳐스)

데이터 타입을 골라 쓰면 앱 코드를 크게 줄일 수 있어요.

  • Strings — 세션·캐시 — 문자열은 세션 토큰이나 캐시된 응답을 담는 기본 단위예요.
  • Strings + INCR — rate limit — 짧은 시간 안의 요청 수를 세는 카운터를 원자적으로 올려요.
  • Lists — 작업 큐의 백엔드 — Bull이 시간이 걸리는 작업을 List에 밀어 넣고 꺼내며 큐를 구현해요.
  • Hashes — 사용자 프로필·세션 데이터 — 여러 속성을 가진 데이터를 키 하나에 담아 읽고 써요.
  • Sorted Sets — 랭킹·스코어 — 점수에 따라 동적으로 순위가 바뀌는 리더보드를 만들 때 써요.
  • Sets — 태그·멤버십 — 중복이 없어야 하고 교집합 같은 집합 질의가 필요한 데이터에 어울려요.

자료구조를 직접 구현하는 대신 Redis가 타입을 들고 있으니, "빠르게 읽고 쓰는" 역할이 훨씬 단순해져요.

더 알아보기