Redis 데이터 타입

Redis 데이터 타입 (Redis data types)

Redis는 데이터 구조 서버예요. 핵심적으로 캐싱, 큐잉, 이벤트 처리 같은 다양한 문제를 해결할 수 있는 네이티브 데이터 타입 모음을 제공하죠. 문자열 하나로 시작해서 스트림·시계열까지, 각 타입이 풀고자 하는 문제가 다르기 때문에 '어떤 타입을 언제 쓰는가'를 아는 것이 Redis를 제대로 쓰는 첫걸음입니다. 아래에서 각 데이터 타입을 간단히 소개하고, 더 자세한 개요와 명령 레퍼런스 링크를 걸어둘게요. 각 개요에는 코드 샘플이 포함된 종합 튜토리얼이 함께 있습니다.

출처: 공식문서 - Redis data types

Redis Open Source이 구현하는 데이터 타입

  • Strings
    • Bitmaps
    • Bitfields
  • Arrays
  • Geospatial indexes
  • Hashes
  • JSON
  • Lists
  • Probabilistic data types
  • Sets
  • Sorted sets
  • Streams
  • Time series
  • Vector sets

일반 목적 데이터 타입 중 어떤 게 공통 작업에 가장 좋은지는 Compare data types 문서에서 조언을 얻을 수 있어요.

Strings

Redis strings은 가장 기본적인 Redis 데이터 타입으로, 바이트 시퀀스를 나타냅니다. 자세한 내용은 아래 링크를 보세요.

Bitfields

Redis bitfields는 문자열 값 안에 여러 카운터를 효율적으로 인코딩해요. 원자적(atomic)인 get, set, increment 연산을 제공하고 다양한 오버플로 정책을 지원합니다. 자세한 내용은 아래를 보세요.

Bitmaps

Redis bitmaps은 문자열에 비트 단위 연산을 수행할 수 있게 해줘요. 자세한 내용은 아래 링크를 보세요.

Arrays

Redis arrays희소(sparse)하며 인덱스로 접근 가능한 문자열 시퀀스예요. 자세한 내용은 아래를 보세요.

Geospatial indexes

Redis geospatial indexes는 주어진 지리적 반경 또는 경계 상자 안의 위치를 찾기에 유용해요. 자세한 내용은 아래를 보세요.

Hashes

Redis hashes필드-값 쌍의 모음으로 모델링된 레코드 타입이에요. 그래서 Python의 dictionaries, Java의 HashMaps, Ruby의 hashes와 비슷하다고 생각하면 됩니다. 자세한 내용은 아래를 보세요.

JSON

Redis JSON은 널리 쓰이는 JSON 텍스트 파일 형식과 맞는 구조적이고 계층적인 배열과 키-값 객체를 제공해요. JSON 텍스트를 Redis 객체로 가져와 개별 데이터 요소에 접근·수정·질의할 수 있습니다. 자세한 내용은 아래를 보세요.

Lists

Redis lists삽입 순서대로 정렬된 문자열 리스트예요. 자세한 내용은 아래 링크를 보세요.

Probabilistic data types (확률적 데이터 타입)

이 데이터 타입들은 근사하지만 매우 효율적인 방식으로 통계를 수집·계산할 수 있게 해줘요. 사용 가능한 타입은 다음과 같습니다.

  • Bloom filter
  • Count-min sketch
  • Cuckoo filter
  • HyperLogLog
  • t-digest
  • Top-K

Bloom filter

Redis Bloom filters로 셋에 요소가 있거나 없다는 것을 확인할 수 있어요. 자세한 내용은 아래를 보세요.

Count-min sketch

Redis Count-min sketch은 값의 스트림 안에서 데이터 포인트의 빈도를 추정해요. 자세한 내용은 아래를 보세요.

Cuckoo filter

Redis Cuckoo filters로 셋에 요소가 있거나 없다는 것을 확인할 수 있어요. Bloom filter와 비슷하지만 기능과 성능 간의 트레이드오프가 약간 다릅니다. 자세한 내용은 아래를 보세요.

HyperLogLog

Redis HyperLogLog 데이터 구조는 대규모 집합의 카디널리티(즉 요소 개수)를 확률적으로 추정해요. 자세한 내용은 아래를 보세요.

t-digest

Redis t-digest 구조는 데이터 값의 스트림에서 백분위수를 추정해요. 자세한 내용은 아래를 보세요.

Top-K

Redis Top-K 구조는 값의 스트림 안에서 데이터 포인트의 순위를 추정해요. 자세한 내용은 아래를 보세요.

Sets

Redis sets은 좋아하는 프로그래밍 언어의 셋(예: Java HashSets, Python sets 등)처럼 동작하는 순서 없는 고유 문자열 컬렉션이에요. Redis 셋에서는 요소를 O(1) 시간(즉 셋 요소 개수와 무관)에 추가, 제거, 존재 여부 확인할 수 있습니다. 자세한 내용은 아래를 보세요.

Sorted sets

Redis sorted sets은 각 문자열과 연결된 스코어에 따라 순서를 유지하는 고유 문자열 컬렉션이에요. 자세한 내용은 아래를 보세요.

Streams

Redis streamappend-only 로그처럼 동작하는 데이터 구조예요. 스트림은 이벤트가 발생한 순서대로 기록한 뒤 처리 목적으로 전파(syndicate)하는 데 도움을 줍니다. 자세한 내용은 아래를 보세요.

Time series

Redis time series 구조는 타임스탬프가 찍힌 데이터 포인트를 저장하고 질의할 수 있게 해줘요. 자세한 내용은 아래를 보세요.

Vector sets

Redis vector sets고차원 벡터 데이터 관리에 특화된 데이터 타입으로, Redis 안에서 빠르고 효율적인 벡터 유사도 검색을 가능하게 해줘요. 각 벡터가 다차원 공간의 데이터 포인트를 나타내는 머신러닝·추천 시스템·시맨틱 검색 유스케이스에 최적화되어 있습니다. Vector sets는 HNSW(hierarchical navigable small world) 알고리즘을 지원해서, 벡터를 저장·색인·질의하고 코사인 유사도 메트릭으로 검색할 수 있어요. Vector sets로 Redis는 벡터 유사도를 구조화된 filters와 결합하는 하이브리드 검색을 네이티브로 지원합니다. 자세한 내용은 아래를 보세요.

확장 (Adding extensions)

포함된 데이터 타입이 제공하는 기능을 넘어 확장하려면 다음 옵션 중 하나를 쓰면 돼요.

  1. Lua로 직접 작성한 커스텀 서버 사이드 함수(server-side functions)를 만든다 — 프로그래머빌리티 문서
  2. 모듈 API로 직접 Redis 모듈을 작성하거나 커뮤니티 지원 모듈을 살펴본다

더 알아보기 (Learn more)

  • 타입 선택 — Compare data types 문서에서 일반 목적 데이터 타입의 장단점을 비교해 보세요.
  • 개별 심화 — 위 각 데이터 타입의 개요 문서에 코드 샘플이 포함된 종합 튜토리얼이 준비되어 있어요.
  • 명령 레퍼런스 — 각 타입별 명령 레퍼런스(?group=string, ?group=hash, ?group=stream 등)로 필요한 명령을 정확히 찾아보세요.
  • 확장 — 서버 사이드 함수(programmability)와 모듈 API로 Redis 기능을 필요한 만큼 넓힐 수 있습니다.