데이터 타입 (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가 타입을 들고 있으니, "빠르게 읽고 쓰는" 역할이 훨씬 단순해져요.
더 알아보기¶
- 공식 문서 (1차)
- 데이터 타입 (Data Types) — redis.io/docs/latest/develop/data-types
- 문자열 — redis.io/docs/latest/develop/data-types/strings
- 목록 — redis.io/docs/latest/develop/data-types/lists
- 해시 — redis.io/docs/latest/develop/data-types/hashes
- 집합 — redis.io/docs/latest/develop/data-types/sets
- 정렬 집합 — redis.io/docs/latest/develop/data-types/sorted-sets
- 큐레이션/블로그 (2차)
- Redis 공식 블로그 — redis.com/blog