본문 바로가기
Kotlin Spring/Kotlin Spring 강의 내용

8) Spring 캐시 (3)redis란?

by Bill Lab 2025. 9. 5.
728x90

1. Redis 란?

    : C언어로 구현된 Key value 기반의 data 저장소(nosql) 이자, pub sub 이 지원 되는 Message Queue

 

2. Redis 는 어떻게 동작할까?

     : Redis 핵심 서버 엔진 단일 쓰레드, 논블로킹 이벤트 루프로 동작

     ( 클라이언트 요청 → 이벤트 루프 → 명령 실행 → 응답 하는 구조임)

  

     - 이벤트 루프란?

(출처: Redis Single-Threaded Architecture: The Key to Its Lightning-Fast Performance)

 

 

       1) 클라이언트가 요청을 보냄 → 소켓 이벤트 감지

       2) 이벤트 루프가 해당 명령을 싱글 스레드에서 바로 실행

           (대부분의 명령은 메모리 연산이므로 바로 처리 가능)

       3) 처리 결과를 바로 클라이언트 소켓에 기록 (별도 스레드 없이도 논블로킹 소켓 사용 가능)

       4) 이벤트 루프는 다음 이벤트(클라이언트 요청, 타이머, 내부 이벤트 등)로 넘어감

 

3. 주요 특징

     - Key, Value 구조에 TTL 세팅 가능

     - 인메모리 기반 데이터저장소(속도가 빠름)

     - String, Lists, Sets, Sorted Sets, Hashes 등의 다양한 자료 구조 지원

 

4. 속도비교

출처: ByteByteGo newsletter

       : 1ns(nano seconds) 는? 10의 -9승 = 0.000000001 초 

         (redis는 100ns!!)

         1µs(microsecond) = 0.000001초.

         RDB(Postgresql기준)는 1ms(millisecond) = 0.001 초

 

5. redis 주요 자료구조

    1) String

출처: https://redis.io/technology/data-structures/

 

     2) Sets

출처:  https://redis.io/technology/data-structures/

 

 

     3) Sorted Sets

출처:  https://redis.io/technology/data-structures/

 

 

     4) Hashes

출처:  https://redis.io/technology/data-structures/

 

 

 

6. Redis 공식 자료

https://redis.io/docs/latest/develop/get-started/

 

Quick starts

Redis quick start guides

redis.io

 

7. Redis docker 로 띄우기

#docker file
FROM redis:7.2.5-alpine3.20

EXPOSE 6379

CMD ["redis-server"]

   (파일명의 확장자는 yaml 이다)

   1) 먼저 빌드를 해주자!! (docker image 로 띄우는 과정이다)

docker build -f DockerFile.yaml . -t redis

 

   2) 도커이미지를 실행하자 (컨테이너를 생성하는 단계이다.)

sudo docker run -p 6379:6379 redis


    이렇게 하면 도커 컨테이너 까지 만들어졌을것이다.

 

  3) 추가로, redis 내부에 접속하고자 한다면, 아래의 명령어를 실행해서 redis cli 로 접속할 수 있다 

docker exec -it ~~~~ /bin/sh
redis-cli

 

8. Sentinel VS Cluster

(출처: https://architecturenotes.co/p/redis)

 

    1) redis sentinel 구조:

        sentinel node를 추가를 두어 단일 마스터에 여러 슬레이브 구조로써, 마스터 또는 각 슬레이브에 장애 발생 시 sentinel node 에서 이를 계속 모니터닝 후 master 교체(failover) 및 자동복구 하는 체계로 구성되어 있다.

 

     2) Cluster 구조

         : 멀티 마스터의 구조(샤드구조)가 가능하고 sentinel 보다 더욱 복잡하고 규모가 큰 HA(고가용성)을 지원한다.

 

9. Redis Backup (Persistence)   

"AOF만으로 운영한다면?"

 

    1) appendonly yes 설정 → Redis는 모든 쓰기 연산을 append-only log에 기록.

 

    2) 서버가 죽더라도 → 재시작 시 appendonly.aof 파일을 읽어서 데이터를 그대로 복구.

         : RDB를 꺼도 데이터 유실 최소화 가능.

           → AOF 백업 방식의 경우 모든 write 과 update 에 대해 기록 하기 때문에 일정간격마다

           현 data 전체를 snapshot 으로 저장하는 RDB 방식보다 유실이 적음) 

 

    3) AOF Rewrite (용량 관리) 설정 

        - AOF는 계속 append만 하다 보니 파일 크기가 커짐.

          : Redis는 rewrite (재작성) 기능을 제공(AOF 단점 보완)

        - 오래된 로그를 압축해서 현재 상태만 반영하는 작은 AOF 파일로 교체.

           : BGREWRITEAOF 명령어 or 자동 설정 (auto-aof-rewrite-percentage, auto-aof-rewrite-min-size).

728x90