DB/Redis

[Redis] 타입

감자개발자 2025. 3. 7. 16:49
💡 Redis는 자료형에 따라 명령어가 정해져 있다
     Key에 저장된 자료형이 다를 경우 오류 발생

 

 

Java의 Map<String, String> 처럼 동작한다고 접근

 


 

 String 

이미지, 음성, 영상, 파일 등 보관 가능 - 문자열도 결국 바이트 배열이기 때문

저장할 수 있는 최대 크기 512MB

<명령어> <key> <value>
-- 데이터 입력, 조회
SET user:email alex@example.com
GET user:email

-- 정수가 문자열로 저장된 경우 INCR(++), DECR(--)
SET user:count 1
INCR user:count  # 2
DECR user:count  # 1

-- ex) 조회수
-- 여러 데이터 한번에 입력, 조회
MSET user:name brad user:email brad@example.com
MGET user:name user:email

 

 

 


 

 List 

 

Linked List 형태로 보관

Stack, Queue처럼 사용 가능 - PUSH / POP을 왼쪽(L), 오른쪽(R)을 조합하여 사용

LPUSH user:list alex  # [alex]
LPUSH user:list bred  # [bred, alex]

RPUSH user:list chad  # [bred, alex, chad]
RPUSH user:list dave  # [bred, alex, chad, dave]

LPOP user:list  # bred
RPOP user:list  # dave
-- 리스트의 크기
LLEN user:list  # 2 [alex, chad]
-- 인덱스로 원소 보기
LRANGE user:list 0 1  # [alex, chad]

-- 모든 원소 보기
-- 1) 충분히 큰 숫자 씀 : out of range x, 인덱스 범위가 벗어나도 범위 내에 있는 요소 나옴
LRANGE user:list 0 100000  # [alex, chad]

-- 2) 0 -1
LRANGE user:list 0 -1 # [alex, chad]

-- end < start : 빈리스트
LRANGE user:list 1 0
-- ex)
-- 소셜네트워크 타임라인 (트위터)
-- Worker Queue 구성 (여러 Wocker Application에게 일을 분배하기 위해 사용하는 큐)

 

 

 



 Set 

중복허용X

-- 데이터 입력, 삭제
SADD user:java alex  # [alex]
SADD user:java brad  # [alex, brad]
SADD user:java char  # [alex, brad, char]

SREM user:java char  # [alex, brad]
-- key에 저장된 모든 원소 반환
SMEMBERS user:java  # [alex, brad]

-- key에 저장된 집합에 value가 존재하는지
SISMEMBER user:java char  # fasle
SISMEMBER user:java alex  # true

-- 집합의 크기
SCARD user:java  # 2
--교집합 합집합
SADD user:python alex
SADD user:python dave

SINTER user:java user:python  # [alex]
SUNION user:java user:python  # [alex, brad, dave]

-- n개의 key에 저장된 집합들의 교집합 크기
SINTERCARD 2 user:java user:python  # 1
-- ex)
-- 중복을 허용하지 않는 방문자 수 세기: URL을 키로 만들고 사용자 ID를 넣어줌
-- 인증 토큰 블랙리스트

-- SISMEMBER 시간복잡도: (O)1

 

 

 



 Hash 

Field-Value Pair

Map<String, Map<String, String>

-- 데이터 입력
HSET user:alex name alex age 25
HSET user:alex major CSE

-- 데이터 조회
HGET user:alex name
HGET user:alex age

-- 복수의 필드 value 조회
HMGET user:alex age major  # [25, CSE]

-- key에 저장된 Hash에 저장된 field-value 전부 반환
HGETALL user:alex

-- key에 저장된 Hash에 저장된 field 전부 반환
HKEYS user:alex  # [name, major, age]

-- key에 저장된 Hash에 저장된 field 갯수 반환
HLEN user:alex  # 3
-- ex)
-- 장바구니, 세션 정보

 

 

 


 Sorted Set 

중복x + 점수

Key Score Value

-- 데이터 입력 + 점수
ZADD user:ranks 10 alex
ZADD user:ranks 9 brad 11 chad
ZADD user:ranks 8 dave 9.5 eric

-- 점수 증가
ZINCRBY user:ranks 2 alex

 

-- member 순위
ZRANK user:ranks alex  # 4
ZRANK user:ranks dave  # 0

-- 내림차순 기준
ZREVRANK user:ranks alex
-- start부터 stop순위까지 
ZRANGE user:ranks 0 3

-- start부터 stop순위까지 내림차순
ZREVRANGE user:ranks 0 3
-- ex)
-- 순위표(리더보드)
-- Rate Limiter 기능 (과도한 요청 거부)

 

 

 


 

공통 명령

-- 키 삭제
DEL user:count
DEL user:list
DEL user:python
-- 만료 시간 설정 (초)
SET expirekey "to be expired"
EXPIRE expirekey 50

--반환 만료될 시간을 UNIX Timestamp로 반환
EXPIRETIME expirekey

-- https://www.unixtimestamp.com/
-- 저장된 모든 Key
KEYS *


-- 모든 Key 제거
FLUSHDB