레디스 캐시
캐시는 어떤 서비스의 응답속도가 느리거나 자주 호출되지만 데이터의 변경은 자주 발생하지 않는 경우, 응답 속도를 개선하기 위해 사용한다.
캐시에는 두 가지 종류가 있다. 아래와 같이 Local Cache와 Global Cache가 있는데 서버가 한대만 있을 경우에는 로컬 캐시를 사용해도 무방하지만, 일반적으로 MSA 도메인에, 트래픽이 많아 서버를 여러대로 분산시켜둔 경우에는 서버 간의 동기화 문제로 로컬 캐시는 사용하기 어렵다. 따라서 이런 경우에 Global Cache를 고려하게 되는데, Redis Cache는 대표적인 Global Cache 중 하나이다.
Local Cache
- 데이터 조회 오버헤드가 없다 (속도가 빠름)
- 서버 간 데이터 일관성이 깨질 수 있다. (서버가 여러 개의 인스턴스이면 서버 간 캐시 데이터가 일치하지 않아 신뢰성이 떨어질 수 있음.)
- 서버 간 동기화가 어렵고, 동기화 비용이 발생한다. (서버가 많을수록 동기화 비용이 발생)
Global Cache
- Network I/O 비용이 발생한다. 하지만 서버 인스턴스가 추가되어도 동일한 비용만을 요구해서 서버가 고도화될수록 더 높은 효율을 발휘한다.
- 데이터 일관성을 유지할 수 있다. 분산 서버 환경에 적합한 구조
간략하게나마 캐시가 어떤 것인지 알아보았는데, 그럼 이제 실제로 Redis 캐시를 설치해보고 사용해보며 학습해보자.
1. Redis 설치 (docker)
docker hub에 redis 설치하는 방법에 대해 간략하게 소개되어 있다.
자세한 내용은 도커 허브에 나와있으니 본인 취향에 맞는 명령어로 실행하면 될 것 같다.
Redis - Official Image | Docker Hub
1.1. docker로 redis 서버 띄우기
nova@DH-N-0258-jiaekim ~ docker run --name some-reids -d redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
ae13dd578326: Pull complete
e6f25d21ebb3: Pull complete
601cc6106ba1: Pull complete
5b8be2fd806e: Pull complete
950c3791111a: Pull complete
567b7ad78092: Pull complete
Digest: sha256:771c20f2507b0e6b59a857abc3be09bb6764bb024db35f379ada9fe62ad932c5
Status: Downloaded newer image for redis:latest
8beac1a8bf27289d2a83e3c5bd42a79cd4d58a0f5cbf81de71dd18ca066922f4
1.2. docker ps로 띄운 서버 확인하기
nova@DH-N-0258-jiaekim ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0315e1ddb32e redis "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp some-redis
1.3. docker exec로 서버 접근하기
docker exec -it {container_id} bash 명령어를 통해 접근할 수 있다.
nova@DH-N-0258-jiaekim ~ docker exec -it 0315e1ddb32e bash
root@0315e1ddb32e:/data#
1.4. redis-cli 잘 실행되나 확인하기
root@0315e1ddb32e:/data# redis-cli --version
redis-cli 6.2.6
2. redis-cli 명령어 알아보기
redis에서 제공하는 자료구조는 여러 가지가 있지만 아래 테스트에서는 우리가 대표적으로 사용하는 string, list, set, hash를 알아보고 추가로 expire 명령어에 대해 학습해보려 한다.
더 여러 가지의 명령어를 학습해보고 싶다면 아래 redis 공식 문서를 통해 공부해보자.
2.1. String
기본 명령어 - get, set, del
- get key - key에 해당하는 value를 가져온다.
- set key value - key에 value를 저장한다.
- del key - key를 삭제한다.
예시
root@0315e1ddb32e:/data# redis-cli
127.0.0.1:6379> get home
(nil)
127.0.0.1:6379> set home helloWorld
OK
127.0.0.1:6379> get home
"helloWorld"
127.0.0.1:6379> del home
(integer) 1
127.0.0.1:6379> get home
(nil)
2.2. List
- lpush key value - List의 index 0에 데이터를 넣는다.
- rpush key value - List의 index last에 데이터를 넣는다.
- lrange key start end - List의 start~end의 element를 반환한다.
- lpop key - List의 데이터를 꺼낸다.
예시
127.0.0.1:6379> lpush home one
(integer) 1
127.0.0.1:6379> lpush home two
(integer) 2
127.0.0.1:6379> lpush home three
(integer) 3
127.0.0.1:6379> llen home
(integer) 3
127.0.0.1:6379> lrange home 0 3
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpop home
"three"
127.0.0.1:6379> lpop home
"two"
127.0.0.1:6379> lpop home
"one"
127.0.0.1:6379> lpop home
(nil)
2.3. Set
기본 명령어 - sadd, srem, smembers, scard, spop
- sadd key member - set에 value를 하나 추가한다.
- smembers key - set에 속해있는 모든 member를 조회한다.
- scard key - set에 속해있는 member을 개수를 구한다.
- spop - set에서 무작위로 member를 가져온다.
예시
127.0.0.1:6379> sadd home one
(integer) 1
127.0.0.1:6379> sadd home two
(integer) 1
127.0.0.1:6379> sadd home two
(integer) 0
127.0.0.1:6379> smembers home
1) "one"
2) "two"
2.4. Hash
기본 명령어 - hset, hget, hdel, hlen, hgetAll, hkeys, hvals
- hset key field value, key에 field와 value를 쌍으로 저장한다.
- hget key field : key에서 field로 value를 가져온다.
- hdel key field : key에서 field를 삭제한다.
- hlen key : field의 개수를 반환한다.
- hgetAll key : field와 value를 모두 반환한다.
- hkeys key : 모든 field를 반환한다.
- hvals key : 모든 value를 반환한다.
127.0.0.1:6379> hset summary 10001 20
(integer) 1
127.0.0.1:6379> hset summary 10002 10
(integer) 1
127.0.0.1:6379> hset summary 10003 0
(integer) 1
127.0.0.1:6379> hget summary 10002
"10"
127.0.0.1:6379> hlen summary
(integer) 3
127.0.0.1:6379> hgetAll summary
1) "10001"
2) "20"
3) "10002"
4) "10"
5) "10003"
6) "0"
127.0.0.1:6379> hkeys summary
1) "10001"
2) "10002"
3) "10003"
127.0.0.1:6379> hvals summary
1) "20"
2) "10"
3) "0"
127.0.0.1:6379> hdel summary 10001
(integer) 1
127.0.0.1:6379> hkeys summary
1) "10002"
2) "10003"
2.5. expire
- expire key member second : key에 ttl을 설정한다.
- ttl key : 남은 ttl을 초단위로 확인한다.
127.0.0.1:6379> expire summary 10
(integer) 1
127.0.0.1:6379> ttl summary
(integer) 7
127.0.0.1:6379> hgetAll summary
(empty array)
참고 자료
https://hub.docker.com/redis
[Redis] Redis의 기본 명령어
Data types tutorial
'개발' 카테고리의 다른 글
[Kafka] Kafka란? (0) | 2022.06.18 |
---|---|
[Cloud] Docker란? (Docker의 개념과 기본 사용법) (0) | 2022.03.31 |
[Spring Cloud] Hystrix 파헤치기 (0) | 2021.11.07 |
[Golang] Go 언어 빠르게 훑어보기 (0) | 2021.10.26 |
gradle (0) | 2021.08.16 |