Redis 자료구조 : String Collection

장민근·2025년 1월 20일

Redis

목록 보기
2/14
post-thumbnail

Redis 자료구조 : String Collection

Redis의 String 자료구조는 단순한 Key-Value 저장 방식으로, 하나의 Key에 하나의 Value를 매핑한다. 이때 Value는 문자열뿐만 아니라 숫자, 바이너리 데이터(예: 이미지) 등 다양한 형식을 지원한다.

String

주요 명령어 및 특징

1. SET

  • Key-Value를 저장하는 기본 명령어이다.
예: SET key value
> SET user:name "Alice"
OK

> GET user:name
"Alice"

2. SETNX (Set if Not Exists)

  • Key가 존재하지 않는 경우에만 값을 저장한다.

  • 일반적인 SET에 비해 중복된 쓰기를 방지할 수 있어 성능이 더 우수하다.

예: SET key value
> SETNX user:age 30
(integer) 1

> SETNX user:age 35
(integer) 0  # 기존 Key가 있으므로 저장되지 않음

문득 강의를 듣다가 이 놈들은 어디에 쓰일까? 하여 SETNX 및 MSETNX에 대해 예시를 찾아보았다.

SETNX는 중복된 데이터 저장을 방지하고 단 한번만 설정해야 할 값을 저장하는 데 유용하다. 주로 고유한 데이터, 분산 락, 초기 설정, 배치 작업, 세션 관리 등에서 사용된다. 이 명령어는 중복 작업 방지 및 데이터의 일관성 유지에 중요한 역할을 한다.
(코드 레벨의 예시를 원한다면 GPT를 활용하도록 하자)

3. MSET (Multiple SET )

  • 여러 Key-Value를 한 번에 저장할 수 있는 명령어로, 네트워크 IO를 줄여 성능이 뛰어나다.
예: MSET key1 value1 key2 value2
> MSET user:email "alice@example.com" user:city "Seoul"
OK

> GET user:email
"alice@example.com"

> GET user:city
"Seoul"

4. MSETNX (Multiple SET if Not Eists )

  • MSET과 SETNX의 조합으로, 여러 Key가 존재하지 않을 때만 값을 저장한다
    .
  • 보통 로그인 세션 관리 등을 위해 사용된다고 한다.
예: MSET key1 value1 key2 value2
> MSETNX user:phone "123-4567" user:gender "female"
(integer) 1

> MSETNX user:phone "987-6543" user:status "active"
(integer) 0  # 일부 Key가 이미 존재하므로 저장되지 않음
MSETNX session:user:123 token "abc123"
#session:user:123이 이미 존재하면 세션 정보가 덮어쓰여지지 않도록 함.

5. INCR / DECR

  • Value가 정수형 데이터일 경우 값을 1 증가(INCR) 또는 감소(DECR)시킨다.

  • 특정 카운터, 좋아요 수 등 정수형 데이터를 다룰 때 유용하다.

예: INCR key → 기존 값에서 1 증가
> SET page:view 10
OK

> INCR page:view
(integer) 11

> DECR page:view
(integer) 10

활용 사례

1. 캐싱

간단한 데이터를 빠르게 저장하고 조회할 때 사용한다. 예를 들어, 사용자 프로필 데이터를 캐싱하여 조회 성능을 높인다.

> SET session:token "abc123" EX 3600
OK  # 1시간 동안 유지되는 세션 토큰

2. 카운터

좋아요, 조회 수, 다운로드 수 등 특정 데이터를 실시간으로 증가시키는 데 활용된다.

> INCR blog:likes
(integer) 1

> INCR blog:likes
(integer) 2

3. TTL 설정

데이터의 유효 기간을 설정하여, 일정 시간이 지나면 자동으로 삭제되도록 관리한다.

예: SET key value EX 60 → 60초 후 자동 삭제

> SET promo:code "DISCOUNT2025" EX 300
OK
> TTL promo:code
(integer) 299  # 남은 TTL(초)

4. 대용량 데이터 저장

이미지 데이터 등 바이너리 데이터를 저장하여 간단히 관리할 수 있다.

# 바이너리 데이터 저장
> SET image:profile "<binary-data>"
OK

# 데이터 확인
> EXISTS image:profile
(integer) 1

# 바이너리 데이터 크기 확인
> STRLEN image:profile
(integer) 234567  # 데이터 크기 출력

String은 Redis에서 가장 기본적이면서도 다양한 활용이 가능한 자료구조로, 높은 성능과 간단한 사용법 덕분에 널리 사용된다.

강의는 정작 6분도 안하는걸 예시를 찾고 정리하다보니 30분이 훌쩍 넘어버렸다.. 앞으로는 시간을 좀 줄여보도록 노력해야겠다

profile
안녕하세요!! 백엔드 개발자를 희망하는 취준생입니다 !!

0개의 댓글