https://www.youtube.com/watch?v=jgpVdJB2sKQ&t=875s
들어가기
- Redis를 Mac OS에 직접 설치하여 사용해보는 방법
Redis란?
Redis는 일종의 거대한 Key-value 페어 JSON 파일을 저장한는 DB라고 생각하면 된다. Redis는 디스크에 저장하는 다른 DB들과 달리 인메모리에 저장하기 때문에 처리 속도가 매우 빠르다는 장점이 있다. 그러나 영구 저장보다는 임시로 저장되는 데이터에 적합하다. 일반적으로 전통적인 DB와 Redis를 조합해서 쓰는 것이 일반적이다.
Redis 사용 준비하기
Mac OS 터미널 기준으로 작업을 진행합니다.
brew install redis
brew services start redis
brew services stop redis
brew services restart redis
# redis-cli 접속하기
redis-cli
// 127.0.0.1:6379>
# redis-cli 나가기
quit
Basic Commands
GET-SET
127.0.0.1:6379> SET name john
OK
127.0.0.1:6379> GET name
"john"
기본적인 SET, GET 명령어
127.0.0.1:6379> SET age 25
OK
127.0.0.1:6379> get age
"25"
참고로 default 데이터 타입은 'string'이다. 숫자 25를 입력했지만 반환 값은 문자열 '25'이다.
DEL
127.0.0.1:6379> DEL age
(integer) 1
127.0.0.1:6379> get age
(nil)
DEL 명령어로 삭제할 수 있다
EXISTS
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> GET name
"john"
127.0.0.1:6379> EXISTS hello
(integer) 0
해당 키의 값이 존재하는지 여부를 확인할 때 EXISTS 메소드를 쓰면 된다. 존재할 경우 1을 반환하고, 없으면 0을 반환하다.
KEYS -pattern-
127.0.0.1:6379> KEYS *
1) "age"
2) "name"
KEYS 다음 패턴을 기입해주면, 패턴에 맞는 키의 값을 찾아준다. 와일드카드를 추가해주면 당연히 모든 키들이 반환된다.
127.0.0.1:6379> KEYS a*
1) "age"
a로 시작하는 키값들만 찾게 해달라고 하니 age키만 반환된다
flushall
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> KEYS *
(empty array)
flushall
을 입력하면 모든 캐시들을 날려버린다.
Handling Expirations
ttl
127.0.0.1:6379> SET name JOHN
OK
127.0.0.1:6379> ttl name
(integer) -1
ttl
에 name을 추가해주면 그 name의 expiration 될 시간을 나타낸다. TTL은 Time-to-live의 약자다.
expire
127.0.0.1:6379> expire name 10
(integer) 1
expire
메소드로 name 키의 ttl을 10초로 지정해주었다. 남은 시간을 확인하려면 위에서 했던 명령어 ttl을 사용해보면 된다.
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
name이라는 키가 존재하지 않는 경우 -2를 반환한다.
setex
127.0.0.1:6379> setex name 10 Sujan
OK
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> ttl name
(integer) -2
setex
를 사용하면 set과 expire 메소드를 동시에 사용한다.
Lists
lpush
127.0.0.1:6379> lpush friends john
(integer) 1
friends라는 리스트에 john이라는 엘리먼트를 넣는다
lrange
127.0.0.1:6379> lrange friends 0 -1
1) "john"
위 명령어는 friends라는 list의 인덱스 0부터 -1까지, 처음부터 끝까지 데이터 다 가져오라는 의미다.
127.0.0.1:6379> lpush friends Sujan
(integer) 2
127.0.0.1:6379> lpush friends Choi
(integer) 3
127.0.0.1:6379> lrange friends 0 -1
1) "Choi"
2) "Sujan"
3) "john"
보면 리스트에 데이터를 추가할 때마다 새 데이터가 1번으로 오는 스택 형태로 싸이는 것을 볼 수 있다. lrange의 l은 left의 약자인 것으로 추정된다.
rpush
127.0.0.1:6379> rpush friends Zanet
(integer) 4
127.0.0.1:6379> lrange friends 0 -1
1) "Choi"
2) "Sujan"
3) "john"
4) "Zanet"
rpush를 하면 아래부터 쌓있다.
lpop, rpop
127.0.0.1:6379> LPOP friends
"Choi"
127.0.0.1:6379> lrange friends 0 -1
1) "Sujan"
2) "john"
3) "Zanet"
127.0.0.1:6379> RPOP friends
"Zanet"
127.0.0.1:6379> lrange friends 0 -1
1) "Sujan"
2) "john"
왼쪽부터 데이터를 제거하고 싶다면 lpop을 사용한다. 반대로 오른쪽부터 제거하고 싶다면 rpop을 사용한다.
최근 5개 메시지 등과 같이 Stack, Queue 방식으로 처리하는 데이터 처리에 유용하다.
Sets
Sets은 중복을 허용하지 않는 list다.
SADD
127.0.0.1:6379> SADD games 'tekken'
(integer) 1
127.0.0.1:6379> SADD games 'love'
(integer) 1
set add.
SMEMBERS
127.0.0.1:6379> SMEMBERS games
1) "love"
2) "tekken"
127.0.0.1:6379>
SMEMBERS
로 Sets 데이터 조회하기
SREM
127.0.0.1:6379> SREM games 'love'
(integer) 1
삭제하기 성공!
Hashes
HSET, HGET
127.0.0.1:6379> HSET person name john
(integer) 1
127.0.0.1:6379> HGET person name
"john"
HGETALL
127.0.0.1:6379> HGETALL person
1) "name"
2) "john"
Example
127.0.0.1:6379> HSET person age 25
(integer) 1
127.0.0.1:6379> HGETALL person
1) "name"
2) "john"
3) "age"
4) "25"
127.0.0.1:6379> HGET person age
"25"
127.0.0.1:6379> HGET person name
"john"
HDEL, HEXISTS
127.0.0.1:6379> HDEL person age
(integer) 1
127.0.0.1:6379> HEXISTS person age
(integer) 0
HDEL
로 지우고 HEXISTS
로 존재 여부를 확인했다.
'Research > Database' 카테고리의 다른 글
db_Redis 클라우드 사용하는 방법 (0) | 2023.03.01 |
---|---|
nestjs_cache-manager로 redis 사용하기 (0) | 2023.02.27 |
DB의 인덱스란 (0) | 2023.02.26 |
DB_Optimistic Lock vs. Pessimistic Lock (0) | 2023.02.24 |
TypeORM_QueryBuilder_Select (0) | 2023.02.24 |
댓글