Mingyu Kim

데이터 구조의 기저 원리 파악

Redis는 하나의 Key에 다양한 형태의 ‘객체(Object)’를 매핑하는 구조다. 단순히 값을 저장하는 게 아니라, 각 자료구조가 메모리를 효율적으로 쓰고 속도를 극대화하기 위해 상황에 따라 내부 인코딩을 스스로 바꾼다는 점이 핵심이다.

1. 기본 구조: redisObject

SET key “value”를 입력하면, 아래와 같은 메타데이터를 포함한 객체를 만든다.

2. 주요 자료구조별 심층 분석

String

단순 텍스트뿐만 아니라 숫자, 바이너리 데이터(이미지 등)도 저장한다.

Lists(연결 리스트)

데이터의 순서를 유지한다.

Sorted Sets

값(Member)과 점수(Score)를 함께 저장하며, 점수순으로 정렬된다.

3. 왜 이렇게 복잡하게 구현했을까?

레디스의 설계 철학은 “메모리는 비싸고 귀하다”이다. 예를 들어, 데이터 개수가 적을 때는 데이터를 압축해서 저장하는 ZipList를 쓰다가, 일정 개수를 넘어가면 검색 속도가 빠른 자료구조로 자동 변환(Conversion)한다.

자료구조 적은 데이터 (Memory Saving) 많은 데이터 (Performance)
Hash ZipList (선형 탐색) Hash Table (상수 시간)
Set IntSet (정수 배열) Hash Table
Sorted Set ZipList SkipList + Hash Table