🖥️ Back-end

Redis 기본 문법 알아보기

승승장규 2025. 3. 3. 23:30
 

인메모리 저장소와 Redis 란? - Redis Stack 설치

MySql, Oracle 등 관계형 데이터베이스는 테이블의 형태로 데이터를 저장한다. 서비스가 종료가 되어도 데이터베이스의 데이터는 계속 남아있는 영속성, 항상 일관된 데이터를 유지하는 일관성이

seungg8361.tistory.com

 

Redis가 설치가 완료되었다면, 문법을 테스트해 보자

-- String
-- Map<String, String>
-- SET -> 문자열 자료형을 의미
-- GET -> 문자열 자료형을 가져온다 -> 문자열 데이터를 반환
-- user:email -> key 의 역할
-- <명령어> <key> .... ex) <SET> <user>
SET user:email alex@example.com
GET user:email

-- key 이름 변경
RENAME user:email user:emails

-- 문자열로 1이 들어갔다
-- 정수가 문자열로 저장된 경우 INCR, DECR 가능
SET user:count 1
GET user:count
-- increment, decrement 의 약자 ex) 조회수 기능
INCR user:count
DECR user:count

-- MSET, MGET -> key-value key-value ....
MSET user:name brad user:email brad@example.com
MGET user:name user:email

-- 문자열 -> toCharArray(), toByteArray()
-- 문자열에 해당하는 데이터 (최대 512MB) -> 이미지, 음성, 영상, 파일 ...

-- List : Linked List 형태로 데이터를 저장한다
-- 스택, 큐의 형태로 사용된다.
-- PUSH, POP -> 왼쪽(L) or 오른쪽(R)
LPUSH user:list alex
LPUSH user:list brad
RPUSH user:list chad
RPUSH user:list dave

LPOP user:list
RPOP user:list
-- 명령어가 자료형에 따라 정해져있다. List 데이터를 넣으면 문자열 데이터에 해당하는 key 에는 사용할 수 없다.
-- key 에 저장된 자료형이 다를 경우 오류가 발생
-- GET user:list, LPOP user:name
-- LLEN : 리스트의 크기
LLEN user:list
-- LRANGE key start end
-- Worker Queue : 여러 Worker Application 에게 일을 분배하기 위해
-- Timeline : 트위터의 타임라인 기능
LRANGE user:list 0 3
LRANGE user:list 1 10
LRANGE user:list 0 -1
LRANGE user:list 0 -2

-- SET : 문자열의 집합, 중복 X
SADD user:java alex
SADD user:java brad
SADD user:java chad

SREM user:java alex
-- 집합에 데이터가 존재하는지 확인
SISMEMBER user:java brad
SISMEMBER user:java dave
-- 데이터 확인
SMEMBERS user:java
-- 집합의 크기
SCARD user:java
-- 교집합, 합집합
SADD user:python alex
SADD user:python dave
SADD user:java alex
-- 교집합
SINTER user:java user:python
-- 합집합
SUNION user:java user:python
-- SINTERCARD ? -> 뒤에 들어올 key 의 갯수
SINTERCARD 2 user:java user:python
-- 중복은 불가능
SADD user:java alex
-- 중복을 허용하지 않는 방문자 수 세기 -> URL 을 key 로 만들고 사용자 ID 를 넣어준다.
-- JWT 로 로그인한 사용자의 로그아웃을 위해 인증 토큰 블랙리스트로 활용
-- SISMEMBER : 시간복잡도 O(1)

-- HASH 임의의 길이의 인자를 받아도 동일한 길이의 결과를 반환
-- Field - Value Pair      ex) Map<String, Map<String, String>>
HSET user:alex name alex age 25
HSET user:alex major CSE
-- key field 명령어로 GET
HGET user:alex name
HGET user:alex age
HMGET user:alex age major
HGETALL user:alex

HKEYS user:alex
HLEN user:alex
HVALS user:alex
-- 장바구니, 세션 정보
HSET cart:alex computer 1 mouse 2 keyboard 10

-- Sorted Set : 정렬된 집합 -> 중복되지 않은 데이터 + 점수
-- 점수에 따라서 데이터를 반환
-- ZADD key score - value
ZADD user:ranks 10 alex
ZADD user:ranks 9 brad 11 chad
ZADD user:ranks 8 dave
ZADD user:ranks 9.5 eric
-- score 추가
ZINCRBY user:ranks 2 alex
-- 순위 확인 0부터 시작
ZRANK user:ranks alex
ZRANK user:ranks eric
ZRANK user:ranks dave

ZREVRANK user:ranks alex
ZRANGE user:ranks 0 3
ZREVRANGE user:ranks 0 2
-- 중복 안되고 score 만 갱신됨.
ZADD user:ranks 15 alex
-- 순위표 (리더보드), Rate Limiter -> 특정 시간과 시간 사이에서 과도한 요청을 거부할 수 있다.

-- DEL : key 삭제하기
DEL user:list
DEL user:python
DEL cart:alex

-- EXPIRE -> 만료시간 설정 ex) 5초 후 삭제, 10초 후 삭제
SET expirekey "to be expired"
EXPIRE expirekey 5
EXPIRE user:alex 10
EXPIRE expirekey 50
-- EXPIRETIME : 만료될 시간을 UNIX Timestamp 로 반환
EXPIRETIME expirekey

-- KEYS : key 를 검색
KEYS user:*

-- FLUSHDB : 모든 키를 삭제함
FLUSHDB

'🖥️ Back-end' 카테고리의 다른 글

Jackson 이란?  (1) 2025.03.05
RabbitMQ 란?  (0) 2025.03.04
인메모리 저장소와 Redis 란? - Redis Stack 설치  (0) 2025.03.01
JPA의 N+1 문제란?  (0) 2025.02.21
JPA의 ddl-auto 옵션이란?  (0) 2025.02.17