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가지 자료형을 다 알아봤다.
각각의 특성을 이해하고 상황에 맞게 선택하면, 레디스를 훨씬 더 효과적으로 활용할 수 있을 것 같다.