[Redis] Redis에서 CRUD 하기

Posted by 김성철

Redis - Redis에서 CRUD 하기

참고링크

https://m.blog.naver.com/sqlmvp/221522073848  
https://computerlove.tistory.com/entry/REDIS-SETNX-SETEX-MEST-MSETNX  
https://velog.io/@zhyun/Redis-SET-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-SADD-SMEMBERS-%ED%95%B4%EC%95%BC%EB%90%A8  

아래 문서 참고사항

key 라고 명시된 값은 key값  
value 명시된 값은 value값  

데이터 저장

set key value  
=====================================================================  
set log_data_1 "data123123"  
=====================================================================  
  
=====================================================================  
set trace_id_12345 "{\"status\": \"complete\",\"parsing_data_log\" : [\" parsing_log_data1111111111\"],\"parsing_data_trace\" : [\" parsing_trace_data1111111111\"],\"retry\": 2,\"api\" : N}"  
=====================================================================  

데이터 가져오기

get key  
=====================================================================  
get log_data_1  
=====================================================================  
  
=====================================================================  
localhost:16379> get trace_id_12345  
"{\"status\": \"complete\",\"parsing_data_log\" : [\" parsing_log_data1111111111\"],\"parsing_data_trace\" : [\" parsing_trace_data1111111111\"],\"retry\": 2,\"api\" : N}"  
=====================================================================  

키값 변경

rename key "newKey"  
=====================================================================  
rename log_data_1 "log_data_2"  
=====================================================================  
  
변경 확인  
=====================================================================  
localhost:16379> get log_data_1  
(nil)  
localhost:16379> get log_data_2  
"data123123"  
=====================================================================  

모든 키 검색

keys 패턴  
- 모든 키 검색  
=====================================================================  
localhost:16379> keys *  
1) "log_data_2"  
2) "trace_data_1"  
=====================================================================  
  
- log_로 시작하는 키 검색  
=====================================================================  
localhost:16379> keys log_*  
1) "log_data_2"  
=====================================================================  

키 존재 확인

exists key  
- 1 존재 , 0 미존재  
=====================================================================  
localhost:16379> exists log_data_2  
(integer) 1  
localhost:16379> exists log_data_3  
(integer) 0  
=====================================================================  

모든 키 삭제

flushall  
=====================================================================  
localhost:16379> flushall  
OK  
localhost:16379> keys *  
(empty list or set)  
=====================================================================  

데이터 일정 시간 키 삭제 (데이터 만료시간 설정)

setex key second value  
※ 위명령어는 deprecated 될 예정  
setex 저장할키 삭제할시간 저장할값  
=====================================================================  
setex log_data_5 5 "data123123"  
=====================================================================  
  
set key value EX second  
set 저장할키 저장할값 EX 삭제할시간  
=====================================================================  
set log_data_6 "data123123" EX 5  
=====================================================================  

삭제되기까지 남은 시간 확인

ttl key  
=====================================================================  
ttl log_data_5  
=====================================================================  

여러개 키 저장

mset key value key value key value  
※ 계속 늘려서 사용 가능  
=====================================================================  
mset trace_data_1 "trace1" trace_data_2 "trace2" trace_data_3 "trace3"  
=====================================================================  
값 확인  
=====================================================================  
get trace_data_1  
get trace_data_2  
get trace_data_3  
=====================================================================  
  
=====================================================================  
localhost:16379> mset trace_data_1 "trace1" trace_data_2 "trace2" trace_data_3 "trace3"  
OK  
localhost:16379> get trace_data_1  
"trace1"  
localhost:16379> get trace_data_2  
"trace2"  
localhost:16379> get trace_data_3  
"trace3"  
=====================================================================  

여러개 키 조회

mget key key key  
※ 계속 늘려서 사용 가능  
=====================================================================  
mget trace_data_1 trace_data_2 trace_data_3  
=====================================================================  
  
=====================================================================  
localhost:16379> mget trace_data_1 trace_data_2 trace_data_3  
1) "trace1"  
2) "trace2"  
3) "trace3"  
=====================================================================  

value 에 값 추가

- key가 이미 존재한다면 append 명령어는 기존 value값 뒤에 추가됨  
- key가 존재하지 않거나 빈 문자열이면 set 명령어와 똑같이 작동함  
  
append key value  
=====================================================================  
localhost:16379> set trace_data_4 "trace4"  
OK  
localhost:16379> get trace_data_4  
"trace4"  
localhost:16379> append trace_data_4 " word"  
(integer) 11  
localhost:16379> get trace_data_4  
"trace4 word"  
=====================================================================  

특정 key값의 value값에 대한 증가/감소 값을 가져올때

incr : 1증가  
decr : 1감소  
incrby : 지정값 증가  
decrby : 지정값 감소  
=====================================================================  
localhost:16379> set data_1 1000  
OK  
localhost:16379> incr data_1  
(integer) 1001  
localhost:16379> get data_1  
"1001"  
=====================================================================  
  
decr  
=====================================================================  
localhost:16379> set data_2 1000  
OK  
localhost:16379> decr data_2  
(integer) 999  
localhost:16379> get data_2  
"999"  
=====================================================================  
  
incrby  
=====================================================================  
localhost:16379> set data_3 1000  
OK  
localhost:16379> incrby data_3 100  
(integer) 1100  
localhost:16379> get data_3  
"1100"  
=====================================================================  
  
decrby  
=====================================================================  
localhost:16379> set data_4 1000  
OK  
localhost:16379> decrby data_4 100  
(integer) 900  
localhost:16379> get data_4  
"900"  
=====================================================================  

Set 자료형에 값 추가

SADD <key> <member> [member ...]  
=====================================================================  
100.83.227.59:16379> set data_01 "zzzzz"  
OK  
100.83.227.59:16379> set data_02 "aaaaa"  
OK  
100.83.227.59:16379> set data_03 "bbbbb"  
OK  
100.83.227.59:16379> set data_04 "ccccc"  
OK  
100.83.227.59:16379>  
100.83.227.59:16379> keys *  
1) "data_04"  
2) "data_03"  
3) "data_02"  
4) "data_01"  
100.83.227.59:16379> sadd data data_01 data_02  
(integer) 2  
100.83.227.59:16379> SMEMBERS data  
1) "data_02"  
2) "data_01"  
=====================================================================  

Set 자료 삭제

SREM key member  
=====================================================================  
100.83.227.59:16379> SMEMBERS data  
1) "data_02"  
2) "data_01"  
100.83.227.59:16379> SREM data data_02  
(integer) 1  
100.83.227.59:16379> SMEMBERS data  
1) "data_01"  
100.83.227.59:16379>  
=====================================================================  

Set 자료 조회

SMEMBERS <key>  
=====================================================================  
100.83.227.59:16379> sadd data data_01 data_02  
(integer) 2  
100.83.227.59:16379> SMEMBERS data  
1) "data_02"  
2) "data_01"  
=====================================================================  

key에 저장된 멤버 수량 확인

SCARD key  
=====================================================================  
100.83.227.59:16379> SMEMBERS data  
1) "data_01"  
100.83.227.59:16379> SCARD data  
(integer) 1  
=====================================================================  

HSET 사용

※ 데이터베이스의 테이블처럼 사용할수 있음  
  
HSET key field value  
=====================================================================  
HSET log:a123 "field1" "value1" "field2" "value2"  
HSET trace:a123 "field3" "value3" "field4" "value4"  
=====================================================================  

HGET 사용

HGET key field  
=====================================================================  
hget trace:a123 field3  
=====================================================================  

덤프 파일 저장

아래의 명령어를 치면 Redis폴더의 dump.rdb 파일로 저장됨  
save  

set 과 sadd 차이

※ GPT한테 물어봄  
set	- String, 하나의 키에 하나의 값, 중복 허용, 단일 데이터 저장  
sadd- Set, 하나의 키에 여러 값, 중복 불허, 여러 값 저장, 중복 방지  
  
set: 단일 값을 저장하고 조회할 때 사용합니다. 예를 들어, 특정 사용자 또는 객체에 대한 하나의 값을 저장할 때 적합합니다.  
sadd: 중복을 허용하지 않는 여러 값들을 하나의 그룹으로 묶어 저장하고자 할 때 사용합니다. 예를 들어, 특정 상태에 해당하는 여러 개의 데이터(키)를 저장할 때 유용합니다.  

SET

자료형: String (문자열)  
기능: 하나의 키에 하나의 값을 저장합니다. 기존에 같은 키가 있을 경우, 해당 값을 덮어씁니다.  
매개변수:  
	key: 문자열 값을 저장할 키.  
	value: 저장할 값 (문자열 또는 직렬화된 데이터).  
  
용도: 개별 키에 대응하는 단일 값을 저장할 때 사용합니다. 이 값은 문자열, 숫자, JSON 형식으로 직렬화된 데이터 등 무엇이든 될 수 있습니다.  

SADD

자료형: Set (집합)  
기능: Redis의 Set 자료형에 하나 이상의 값을 추가합니다. Set은 중복을 허용하지 않으며, 순서가 없는 유일한 값들로 구성됩니다. Set에 이미 존재하는 값은 추가되지 않습니다.  
매개변수:  
	key: Set을 식별할 이름.  
	member: Set에 추가할 값(들). 한 번에 여러 값을 추가할 수 있습니다.  
용도: 여러 값을 하나의 집합으로 저장할 때 사용합니다. 상태나 카테고리별로 데이터를 분류하고 관리할 때 유용합니다. 값들이 중복되면 중복을 자동으로 제거합니다.  

※ 아래부터는 GPT 한테 물어본 Redis 자주 사용하는 명령어와 그 예시
######################################################################

Redis 명령어 요약

데이터 저장/조회: SET, GET, HSET, HGET, HGETALL, SADD, SMEMBERS, LPUSH, RPUSH  
데이터 관리: DEL, EXPIRE, TTL, FLUSHALL  
숫자 증가/감소: INCR, DECR  
대규모 데이터 탐색: SCAN  

SET / GET (문자열 저장/조회)

SET: 특정 키에 단일 값을 저장.  
GET: 해당 키에 저장된 값을 가져옴.  
=====================================================================  
## 문자열 데이터 저장  
SET my_key "Hello, Redis!"  
  
## 문자열 데이터 조회  
GET my_key  
## 결과: "Hello, Redis!"  
=====================================================================  

SADD / SMEMBERS (Set 자료형에 값 추가/조회)

SADD: Set 자료형에 값을 추가 (중복 방지).  
SMEMBERS: Set에 저장된 모든 값을 조회.  
=====================================================================  
## Set에 값 추가  
SADD my_set "value1"  
SADD my_set "value2"  
  
## Set의 모든 값 조회  
SMEMBERS my_set  
## 결과: ["value1", "value2"]  
=====================================================================  

HSET / HGET / HGETALL (Hash 자료형에서 필드 저장/조회)

HSET: Hash 자료형에서 특정 필드에 값을 저장.  
HGET: Hash 자료형에서 특정 필드의 값을 조회.  
HGETALL: Hash의 모든 필드와 값을 조회.  
=====================================================================  
## Hash에 필드와 값 저장  
HSET user:1001 name "Alice"  
HSET user:1001 age 30  
  
## 특정 필드 값 조회  
HGET user:1001 name  
## 결과: "Alice"  
  
## Hash의 모든 필드 조회  
HGETALL user:1001  
## 결과: {"name": "Alice", "age": "30"}  
=====================================================================  
=====================================================================  
HSET user name "sungchul"  
HSET user age 34  
HGET user name  
HGETALL user  
=====================================================================  

LPUSH / RPUSH / LPOP / RPOP (List 자료형에서 값 추가/제거)

LPUSH: List의 왼쪽에 값 추가.  
RPUSH: List의 오른쪽에 값 추가.  
LPOP: List의 왼쪽에서 값을 제거하고 반환.  
RPOP: List의 오른쪽에서 값을 제거하고 반환.  
=====================================================================  
## List 왼쪽에 값 추가  
LPUSH my_list "value1"  
LPUSH my_list "value2"  
  
## List 오른쪽에 값 추가  
RPUSH my_list "value3"  
  
## List의 모든 값 조회 , 시작index , 종료 index (-1일경우 전부 조회)  
LRANGE my_list 0 -1  
## 결과: ["value2", "value1", "value3"]  
  
## List 왼쪽에서 값 제거  
LPOP my_list  
## 결과: "value2"  
  
## List 오른쪽에서 값 제거  
RPOP my_list  
## 결과: "value3"  
=====================================================================  

EXPIRE / TTL (키의 만료 시간 설정/조회)

EXPIRE: 특정 키에 만료 시간을 설정 (초 단위).  
TTL: 키의 남은 만료 시간을 조회.  
=====================================================================  
## my_key 키에 60초 만료 시간 설정  
SET my_key "temporary value"  
EXPIRE my_key 60  
  
## my_key의 남은 만료 시간 조회  
TTL my_key  
## 결과: 60 (초 단위 남은 시간)  
=====================================================================  

DEL (키 삭제)

DEL: 특정 키를 삭제.  
=====================================================================  
## 특정 키 삭제  
DEL my_key  
  
## 여러 키 삭제  
DEL key1 key2 key3  
=====================================================================  

INCR / DECR (숫자 증가/감소)

INCR: 해당 키에 저장된 숫자를 1 증가.  
DECR: 해당 키에 저장된 숫자를 1 감소.  
=====================================================================  
## 숫자 값 저장  
SET counter 10  
  
## 숫자 증가  
INCR counter  
## 결과: 11  
  
## 숫자 감소  
DECR counter  
## 결과: 10  
=====================================================================  

MSET / MGET (여러 키에 값 저장/조회)

MSET: 여러 키에 값을 한 번에 저장.  
MGET: 여러 키에 저장된 값을 한 번에 조회.  
=====================================================================  
## 여러 키에 값 저장  
MSET key1 "value1" key2 "value2" key3 "value3"  
  
## 여러 키 값 조회  
MGET key1 key2 key3  
## 결과: ["value1", "value2", "value3"]  
=====================================================================  

FLUSHALL (모든 키 삭제)

FLUSHALL: Redis 서버의 모든 키를 삭제.  
=====================================================================  
## 모든 키 삭제 (주의)  
FLUSHALL  
=====================================================================  

SCAN (대규모 데이터 탐색)

SCAN: 큰 데이터셋에서 효율적으로 키를 탐색할 때 사용. 한 번에 모든 키를 반환하지 않고 부분적으로 결과를 반환함.  
=====================================================================  
## 모든 키를 탐색 (부분적으로 반환됨)  
SCAN 0  
## 결과: ["key1", "key2", ...]  
=====================================================================