본문 바로가기

[개발자를 위한 레디스] 3장 레디스 기본 개념

@bum0w02025. 10. 11. 15:35

레디스의 자료 구조

string

- 기본 특징

  • Redis의 String 타입은 최대 512MB까지 저장할 수 있다.
  • Redis는 Key-Value Store이며, 하나의 키에는 하나의 값만 저장된다. → 일대일 매핑 구조

- 키 저장 옵션

  • NX: 키가 없을 때만 새로운 키를 저장
  • XX: 키가 이미 있을 때만 값 갱신 (새로운 키 생성 X)

- 숫자 연산

  • 숫자 형태로도 저장 가능
  • 원자적(Atomic) 연산 제공 → 동시성 이슈 없음
    • INCR: 값을 1 증가
    • INCRBY {key} {n}: 값을 n만큼 증가
    • (유사하게 DECR, DECRBY도 있음)

- 다중 키 연산

  • MSET key1 val1 key2 val2 ... → 여러 키-값을 한 번에 저장
  • MGET key1 key2 ... → 여러 값을 한 번에 가져오기
  • 네트워크 왕복 횟수를 줄여 성능 최적화 가능

 

list

- 기본 특징

  • 순서를 가지는 문자열의 목록
  • 하나의 List에 최대 약 42억 개 아이템 저장 가능
  • 스택(Stack), 큐(Queue) 구조로 활용 가능
  • 주로 로그 저장, 메시지 큐 등에 사용됨

- 주요 명령어

 

(1) 데이터 추가

  • LPUSH key value → 리스트의 왼쪽(앞)에 데이터 추가
  • RPUSH key value → 리스트의 오른쪽(뒤)에 데이터 추가

 

(2) 데이터 조회

  • LRANGE key start end → 지정한 범위의 데이터 조회
    • (Ex. LRANGE mylist 0 -1 → 전체 조회)
  • LINDEX key index → 특정 인덱스 데이터 확인

 

(3) 데이터 수정/삽입

  • LSET key index value → 특정 인덱스 데이터 덮어쓰기
  • LINSERT key BEFORE|AFTER pivot value → 특정 데이터 앞/뒤에 삽입

 

(4) 데이터 삭제

  • LTRIM key start end → 지정한 범위 외 데이터 모두 삭제
  • (반환값 없음, 내부에서 리스트를 잘라내는 방식)

 

- 로그 저장 활용 예시

  • 로그 데이터는 주기적으로 삭제해 저장 공간 확보가 필요함 (Ex. 최대 1000개 로그 유지하기)
LPUSH logdata <data>      # 로그 추가
LTRIM logdata 0 999       # 인덱스 0~999만 남기고 나머지는 삭제
  • 주의: 데이터 개수가 1001개가 되기 전까지는 LTRIM 동작하지 않음

 

Hash

- 기본 특징

  • 필드(Field)-값(Value) 쌍으로 구성된 자료구조
  • 하나의 키 안에 여러 개의 필드-값 쌍을 저장 가능
  • 각 아이템은 서로 다른 필드를 가질 수 있으며, 동적으로 필드 추가 가능
  • 주로 객체(사용자 정보, 상품 정보 등) 저장에 적합

- 주요 명령어

 

(1) 데이터 저장

  • HSET key field value → 특정 필드에 값 저장
  • HSET key field1 value1 field2 value2 ... → 여러 필드-값 쌍을 한 번에 저장

(2) 데이터 조회

  • HGET key field → 특정 필드 값 조회
  • HMGET key field1 field2 ... → 여러 필드 값 조회
  • HGETALL key → 모든 필드-값 쌍 조회 (필드와 값이 순서대로 반환됨)
HSET user:1001 name "홍길동" age "25" email "hong@test.com"

HGET user:1001 name         
# 결과: "홍길동"   → user:1001 해시에서 name 필드 값 조회

HMGET user:1001 name age    
# 결과: "홍길동" "25"   → user:1001 해시에서 name, age 필드 값 동시 조회

HGETALL user:1001           
# 결과: name 홍길동 age 25 email hong@test.com
# → user:1001 해시에 저장된 모든 필드-값 쌍 조회

 

 

Set

- 기본 특징

  • 정렬되지 않은 문자열의 집합
  • 중복 불가 → 유일한 원소만 저장
  • 주로 객체 간 관계 계산, 중복 제거, 멤버 관리 등에 사용

- 주요 명령어

 

(1) 데이터 저장 및 조회

  • SADD key member1 member2 ... → 아이템 추가
  • SMEMBERS key → Set에 저장된 전체 아이템 조회 (순서 랜덤)

(2) 데이터 삭제

  • SREM key member → 특정 아이템 삭제
  • SPOP key [count] → 랜덤으로 아이템 삭제 후 반환 (count 지정 가능)

(3) 집합 연산

  • SINTER key1 key2 ... → 교집합 계산
  • SUNION key1 key2 ... → 합집합 계산
  • SDIFF key1 key2 ... → 차집합 계산

 

sorted Set

- 기본 특징

  • 스코어(score) 값에 따라 정렬되는 고유한 문자열의 집합
  • 아이템 저장 시 스코어 값으로 자동 정렬
  • 같은 스코어를 가진 아이템은 사전 순(lexicographical order)으로 정렬
  • 중복 아이템 저장 불가

- 주요 명령어

 

(1) 데이터 추가

  • ZADD key [옵션] score member [score member ...] → 스코어-값 쌍으로 아이템 저장
    • NX → 아이템이 없을 때만 신규 삽입
    • XX → 아이템이 있을 때만 스코어 업데이트
    • LT → 기존 스코어보다 작을 때만 업데이트
    • GT → 기존 스코어보다 클 때만 업데이트

(2) 데이터 조회

  • ZRANGE key start stop [옵션] → 범위 조회
    • 기본: 인덱스로 조회
    • WITHSCORES: 스코어와 함께 조회
    • REV: 역순 조회
    • BYSCORE: 스코어 기준 조회
    • BYLEX: 스코어 동일 시 사전 순 조회
    • LIMIT offset count: 조회 개수 제한

- 인덱스 기반 조회

기본적으로 인덱스로 범위를 지정하여 조회

  • WITHSCORES: 스코어와 함께 조회
  • REV: 역순으로 조회

 

- 스코어 기반 조회

BYSCORE 옵션을 사용하여 스코어 범위로 조회

  • 스코어에 ' ( ' 문자를 추가하면 해당 스코어 포함하지 않음
  • +inf: 입력한 스코어보다 큰 모든 값 조회
  • 역순 조회 시 최솟값과 최댓값 순서 변경

- 사전 순(lexicographical) 조회

  • 스코어가 같은 아이템이 있을 때, BYLEX 옵션 사용
  • 사전 순으로 특정 범위 아이템 조회 가능

 

비트맵(Bitmap)

string 자료 구조에 bit 연산을 수행할 수 있도록 확장한 형태

데이터를 비트 단위로 저장하기 때문에 저장 공간을 획기적으로 줄일 수 있음

 

- 주요 명령어

  • SETBIT : 비트를 저장 (특정 오프셋 위치에 0 또는 1 설정)
  • GETBIT : 저장된 비트를 조회 (특정 오프셋 위치의 값을 반환)
  • BITFIELD : 여러 비트를 한 번에 설정하거나 조회

주로 대규모 상태(Ex. 사용자 로그인 여부, 방문 기록, 플래그 데이터 등)를 효율적으로 저장하고 빠르게 조회해야 하는 경우에 사용

 

 

HyperLogLog

 

- 기본 특징

  • 집합의 고유 원소 개수(카디널리티)를 추정하는 확률적 자료 구조
  • 대량 데이터에서 중복되지 않는 고유한 값의 개수 집계에 사용
  • 입력 데이터를 직접 저장하지 않고 확률적 알고리즘으로 처리
  • 최대 12KB의 공간 사용
  • 추정 오차율 약 0.81%

- 주요 명령어

  • PFADD: HyperLogLog에 아이템 저장
  • PFCOUNT: 저장된 아이템의 고유 개수(카디널리티) 추정

 

Geospatial

 

- 기본 특징

  • 경도, 위도 데이터 쌍의 집합으로 지리 데이터 저장
  • 내부적으로 sorted set으로 관리
  • 하나의 자료 구조 안에 키 중복 불가

- 주요 명령어

  • GEOADD: <key> 경도 위도 member 순서로 데이터 저장
  • GEOPOS: 저장된 위치 데이터 조회
  • GEODIST: 두 아이템 간 거리 반환
  • GEOSEARCH: 특정 위치 기준으로 거리 내 아이템 검색
    • BYRADIUS: 반경 기준
    • BYBOX: 직사각형 기준

 

Stream

 

- 기본 특징

  • 레디스를 메시지 브로커로 활용할 수 있는 자료 구조
  • 카프카와 유사한 소비자 그룹 개념 존재
  • 데이터는 계속 추가되는 방식으로 저장
  • 실시간 이벤트, 로그 데이터 저장에 적합

- 주요 명령어

  • XADD: 스트림에 데이터 추가
  • XRANGE: 특정 범위의 데이터 조회
  • XREAD: 스트림 데이터 읽기
  • XGROUP: 소비자 그룹 생성 및 관리
  • XACK: 소비자 그룹에서 처리 완료된 메시지 확인

 

레디스에서 키를 관리하는 

1. 키의 자동 생성과 삭제

 

  • 키가 없을 때 아이템 삽입 시 빈 자료 구조 자동 생성
  • 모든 아이템 삭제 시 키 자동 삭제 (단, stream은 예외)
  • 키가 없는 상태에서 삭제·조회 명령 시 에러 없이 빈 자료 구조처럼 동작

──────────────────────────

 

2. 키 관련 주요 명령어

 

(1) 키 조회

 

  • EXISTS: 키 존재 여부 확인 (존재 1, 없음 0)
  • KEYS: 저장된 모든 키 조회 (패턴 사용 가능)
    • h?llo → hello, hallo
    • h*llo → heeeello 등
    • h[ae]llo → hello, hallo
    • h[^e]llo → hallo, hbllo
    • h[a-b]llo → hallo, hbllo
  •  
  • SCAN: 커서 기반 키 조회 (KEYS 대체용, 성능 향상)
    • SSCAN / HSCAN / ZSCAN: 각각 set, hash, sorted set 전용
  •  
  • SORT: list, set, sorted set 내 아이템 정렬
    • 문자열 정렬 시 ALPHA 옵션 사용
  •  
  • RENAME / RENAMENX: 키 이름 변경
  • COPY: 기존 키를 새로운 키로 복사
  • TYPE: 키의 자료 구조 타입 조회
  • OBJECT: 키의 상세 정보 조회

──────────────────────────

 

(2) 키 삭제

 

  • FLUSHALL: 모든 키 삭제
  • DEL: 키와 데이터 삭제 (동기 처리)
  • UNLINK: 백그라운드에서 키 삭제 (비동기, 우선 연결 해제)

──────────────────────────

 

(3) 키 만료 시간 관리

 

  • EXPIRE: 만료 시간(초 단위) 설정
    • NX: 기존 만료 시간 없음 → 설정
    • XX: 기존 만료 시간 있음 → 갱신
    • GT: 기존 만료 시간보다 클 때만 설정
    • LT: 기존 만료 시간보다 작을 때만 설정
  •  
  • EXPIREAT: 특정 유닉스 타임스탬프로 만료 설정
  • EXPIRETIME: 만료될 유닉스 타임스탬프 반환
  • TTL: 만료까지 남은 시간(초 단위) 반환



bum0w0
@bum0w0 :: bum0w0 님의 블로그

bum0w0 님의 블로그 입니다.

목차