본문 바로가기
TIL

TIL 240719 - Redis

by lemonpie611 2024. 7. 19.

최종 프로젝트에 사용할 기술들을 하나하나씩 정리할 예정..

일단 Redis부터

 

1. Redis 란?

메모리 기반의 데이터 저장소로, key-value 데이터 구조에 기반한 다양한 형태의 자료 구조를 제공하고, 데이터들을 저장할 수 있다.

  • 다양한 자료구조를 지닐 수 있음
  • 메모리에 데이터를 저장 > 저장공간에는 제약이 있으나 처리 속도는 빠름
  • 저장공간 제약으로 주로 보조 데이터 저장소로 사용
  • 저장공간 제약 극복을 위해 레디스 클러스터 기능도 제공 > 저장공간 확장
  • 저장된 데이터를 영구적으로 디스크에 저장할 수 있는 백업 기능 제공 > 애플리케이션의 주 저장소로도 사용 가능
  • 레디스 내부에서 명령어를 처리하는 부분은 싱글 스레드 아키텍처로 구현됨

 

2. Redis 데이터 백업 방식

데이터 저장 및 조회가 매우 빠르다..!! 근데 메모리 특성상 데이터 휘발성이 크다..

이를 보완하기 위해 레디스는 데이터를 디스크에 백업하는 기능을 제공하여 데이터에 영속성을 제공한다.

 

1) RDB (Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장한다.

  • 순간적으로 메모리에 있는 내용을 디스크에 전체 옮겨담음
  • 특정 시간마다 여러개의 스냅샷을 생성하고, 데이터를 복원해야 한다면 스냅샷 파일을 그대로 로딩만 하면 됨
  • 스냅샷 이후 변경된 데이터는 복구가 불가능

2) AOF (Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식

  • 데이터를 생성, 수정, 삭제하는 이벤트를 초 단위로 취합 및 로그 파일에 작성
  • 모든 데이터의 변경 기록들을 보관하고 있으므로 최신 데이터 정보를 백업할 수 있음
  • RDB 방식에 비해 데이터 유실량이 적음(초 단위 데이터는 유실 가능...)
  • RDB에 비해 로딩 속도가 느리고 파일 크기가 큼..

 

3. Redis 백업 방식 설정

1) RDB 자동 : redis.conf 파일 > SAVE 옵션 설정

2) RDB 수동 : redis-cli에서 BGSAVE 커맨드를 이용하여 수동으로 RDB 파일 저장

  • SAVE 커맨드는 사용XXX (레디스는 싱글스레드로, 저장하는 동안에는 다른 작업 수행이 불가능함)

3) AOF 자동 : redis.conf 파일 > auto-aof-rewrite-percentage 옵션 설정 (크기 기준)

4) AOF 수동 : redis-cli에서 BGREWRITEOF 커맨드를 이용하여 수동으로 AOF 파일 재작성

 

4. Redis의 코어 스레드

사용자들이 실행한 명령어들을 이벤트 큐에 적재하고 싱글 스레드로 하나씩 처리하는 이벤트 루프 방식으로 처리함

 

1) 장점

  • 멀티 스레드 환경이 아니기 때문에 Context Switch 발생 X > 효율적인 시스템 리소스 사용 가능
  • Deadlock 발생 X

2) 단점

  • 전체 데이터 스캔과 같이 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어 처리 불가능 > 효율X
  • 다른 명령어들은 이벤트 큐에 저장된 시간이 길어져 응답 속도 저하됨

 

5. Redis 사용 용도

1) 주 데이터 저장소

  • AOF, RDB 백업과 레디스 아키텍처를 사용하여 주 저장소로 데이터 저장 가능
  • but 용량이 큰 데이터 저장소로는 적절하지 않음

2) 데이터 캐시

  • 인메모리 데이터 저장소이므로, 주 저장소의 데이터를 캐시하여 빠르게 데이터를 읽을 수 있음
  • 캐시된 데이터는 한곳에 저장되는 중앙 집중형 구조로 구성 > 데이터 일관성 유지 가능

3) 분산 락(distributed lock)

  • 분산 환경에서 여러 시스템이 동시에 데이터 처리할 때는 특정 공유 자원의 사용 여부를 검증하여 데드락을 방지
  • 레디스를 분산 락으로 사용 가능

4) 순위 계산

  • 레디스에서 제공하는 ZSet(Sorted Set) 자료구조를 이용하여 순위 계산 용도로 사용 가능
  • ZSet : 정렬 기능이 포함된 Set 자료구조