DB

[Redis] 레디스 자료형 8가지

KJihun 2025. 6. 24. 10:02
728x90

 

요즘 Redis를 찾아보며 자료형이 정말 다양하다는 걸 깨달았다.

처음엔 그냥 Key-Value 저장소인 줄 알았는데, 알고 보니 8가지나 되는 자료형을 지원하였다. 

📚 기본 자료형 5가지

1. String

> SET mykey "안녕하세요!"
OK
> GET mykey
"안녕하세요!"
> SET counter 100
OK
> INCR counter
(integer) 101

 

  • 가장 기본적이고 많이 사용되는 자료형
  • 텍스트, 숫자, 이진 데이터 모두 저장 가능
  • 최대 512MB까지 저장 가능
  • 숫자라면 INCR, DECR 같은 연산 가능

사용하기 유용한 상황

  • 간단한 캐싱할 때
  • 세션 정보 저장할 때
  • 카운터 (조회수, 좋아요 수 등)
  • API 토큰 저장할 때

2. List - 순서가 중요한 데이터들

> LPUSH mylist "첫번째"
(integer) 1
> LPUSH mylist "두번째"
(integer) 2
> RPUSH mylist "세번째"
(integer) 3
> LRANGE mylist 0 -1
1) "두번째"
2) "첫번째"
3) "세번째"

 

  • 순서가 있고 중복을 허용하는 자료구조
  • Linked-list로 구현되어 양끝에서의 추가/삭제가 O(1)로 빠르다
  • 근데 중간 접근은 느린 편이라고 한다 (인덱스로 접근 시 O(n))

사용하기 유용한 상황

  • 큐(Queue)나 스택(Stack) 구현할 때
  • 최근 방문 기록 저장할 때
  • 메시지 큐 시스템 만들 때
  • 타임라인 데이터 관리할 때

3. Set - 중복 없는 집합

> SADD myset "사과"
(integer) 1
> SADD myset "바나나"
(integer) 1
> SADD myset "사과"  # 중복이니까 추가 안됨
(integer) 0
> SMEMBERS myset
1) "바나나"
2) "사과"

 

  • 중복을 허용하지 않는 문자열 집합이다
  • 순서 없음 (정렬되지 않음)
  • 집합 연산 지원한다고 한다 (합집합, 교집합, 차집합)

사용하기 유용한 상황

  • 태그 시스템 만들 때
  • 고유한 방문자 추적할 때
  • 블랙리스트/화이트리스트 관리할 때
  • 친구 관계 같은 관계 데이터 저장할 때

4. Sorted Set (ZSet) - 점수로 정렬되는 집합

> ZADD ranking 100 "철수"
(integer) 1
> ZADD ranking 85 "영희"
(integer) 1
> ZADD ranking 95 "민수"
(integer) 1
> ZRANGE ranking 0 -1 WITHSCORES
1) "영희"
2) "85"
3) "민수"
4) "95"
5) "철수"
6) "100"

 

  • Set의 모든 기능 + 점수(score)를 통한 자동 정렬
  • 각 멤버는 고유하며 점수와 함께 저장된다
  • 점수 범위로 검색도 가능하다고 한다

사용하기 유용한 상황

  • 랭킹 보드 (게임 점수, 인기글 등)
  • 우선순위 큐 구현할 때
  • 시간 기반 데이터 (타임스탬프를 점수로)
  • 추천 시스템 만들 때

5. Hash - 객체를 표현하는 자료형

> HSET user:1000 name "김개발" age 30 city "서울"
(integer) 3
> HGET user:1000 name
"김개발"
> HGETALL user:1000
1) "name"
2) "김개발"
3) "age"
4) "30"
5) "city"
6) "서울"

 

  • 필드-값 쌍의 컬렉션이다
  • 하나의 키에 여러 필드를 저장할 수 있다
  • 객체나 구조체를 표현하기 좋다

사용하기 유용한 상황

  • 사용자 프로필 정보 저장
  • 상품 정보 관리
  • 설정값 관리
  • 복잡한 세션 데이터

 

🚀 고급 자료형 3가지

6. HyperLogLog - 대용량 집합의 개수 추정

> PFADD visitors "user1" "user2" "user3"
(integer) 1
> PFADD visitors "user1" "user4"  # user1은 이미 있으니 실제로는 user4만 추가
(integer) 1
> PFCOUNT visitors
(integer) 4

 

  • 확률적 데이터 구조로 대용량 집합의 카디널리티 추정한다
  • 최대 12KB의 고정된 메모리만 사용한다
  • 표준 오차 0.81%로 정확도가 높다

사용하기 유용한 상황

  • 일일 고유 방문자 수 집계할 때
  • 대용량 데이터의 고유값 개수 추정할 때
  • 메모리를 절약하면서 통계가 필요한 경우

7. Stream - 실시간 데이터 스트리밍

> XADD mystream * sensor temperature 23.5 humidity 60
"1640995200000-0"
> XADD mystream * sensor temperature 24.1 humidity 58
"1640995260000-0"
> XREAD STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) "1640995200000-0"
         2) 1) "sensor"
            2) "temperature"
            3) "23.5"
            4) "humidity"
            5) "60"

 

  • Redis 5.0에서 추가된 최신 자료형
  • Append-only 구조 (로그 파일)
  • Consumer Group으로 분산 처리 가능
  • 메시지 acknowledgment도 지원

사용하기 유용한 상황

  • 이벤트 스트리밍
  • 실시간 로그 처리
  • 메시지 큐
  • IoT 센서 데이터 수집

8. JSON - 문서 데이터베이스

> JSON.SET user:1001 $ '{"name":"박개발","skills":["Python","Redis"],"age":28}'
OK
> JSON.GET user:1001 $.name
"[\"박개발\"]"
> JSON.ARRAPPEND user:1001 $.skills '"JavaScript"'
[3]
  • RedisJSON 모듈을 통해 지원 (별도 설치 필요)
  • JSON 문서의 부분 업데이트 가능
  • RediSearch와 연동하여 인덱싱과 검색도 지원

사용하기 유용한 상황

  • API 응답 캐싱할 때
  • 동적 스키마가 필요한 데이터
  • 복잡한 중첩 구조의 데이터
  • 문서 데이터베이스 용도로

💡 정리하면서

레디스의 8가지 자료형을 다 알아봤다.

각각의 특성을 이해하고 상황에 맞게 선택하면, 레디스를 훨씬 더 효과적으로 활용할 수 있을 것 같다.