본문 바로가기
Database

Redis란

by BTC_문땅훈 2023. 11. 10.

 

 

베하 ~! 😊

 

 

오늘은 'Redis'에 대해 알아보겠습니다.

 

 

Redis란?

Redis는 Remote Dictionary Server의 약자로, 오픈 소스 기반의 고성능 NoSQL 데이터베이스입니다. 주로 메모리 내 데이터 저장소로 사용되며, 데이터베이스, 캐시, 메시지 브로커 등 다양한 용도로 활용됩니다.

 

Redis

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

 

특징

 

1. 메모리 기반 데이터 저장

- Redis는 기본적으로 In-Memory 기반입니다. 데이터를 메모리에 저장하고 빠른 읽기 및 쓰기 성능을 제공합니다. 이는 디스크 I/O가 줄어들어 전반적으로 높은 처리량을 가능케 하여 데이터를 읽고 쓰는 과저에서 속도가 훨씬 빠릅니다.

 

2. Cache 방식

여기서 캐싱에 대해 간단하게 말하자면, 데이터나 계산 결과를 미리 저장해두고, 나중에 더 빠르게 접근하여 성능을 향상시키는 기술입니다. 즉, 중복된 계산을 줄여 성능을 향상시켜 주는 역할을 합니다. Redis는 메모리 기반의 데이터베이스로써 캐싱에 이상적인 도구로 활용됩니다.

많은 읽기 요청이 있는 경우, 데이터를 미리 계산해놓고 빠르게 반환함으로써 전반적인 응답 속도를 향상시킬 수 있습니다.

그리고 Redis는 문자역, 리스트, 해시, 셋, 정렬된 셋 등 다양한 데이터 타입을 지원합니다. 이를 적절히 활용하여 캐시에 필요한 데이터를 구조화하고 저장할 수 있습니다.

 

 

+) 캐시 사용 구조 및 동작 방식

(1) 데이터 요청이 오면, 먼저 캐시에서 데이터를 찾습니다.

(2) 캐시가 없거나 너무 오래되면 원본 데이터가 저장된 곳인 DB Or Server에 데이터를 조회합니다. 이때, DB에서 읽어온 데이터를 캐시에 다시 저장합니다.

(3) 캐시에 데이터가 있으면 캐시의 저장된 데이터를 제공합니다.

(4) 캐시는 용량이 작은 공간으로 사용하지 않거나, 오래된 데이터는 삭제합니다.

출처 : https://velog.io/@hyejin4169/%EC%BA%90%EC%8B%9C%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80

 

 

3. 다양한 데이터 구조 지원

Redis는 Key-Value로 데이터가 이루어져 있습니다. 이외에도, 문자열, 리스트, 해시, 셋, 정렬된 셋 등 다양한 데이터 타입을 활용할 수 있어서 복잡한 데이터 구조를 효율적으로 다룰 수 있습니다.

 

4. 영속성 지원

데이터를 메모리에 저장하더라도 Redis는 디스크에 스냅샷을 저장해 영속성을 보장합니다. 이를 통해 시스템 재시작 시에도 데이터 손실 없이 지속적인 서비스를 제공할 수 있습니다.

 

5. Expires

데이터(key-value)에 만료시간을 설정하여 일정 시간 후 데이터를 자동으로 없앨 수 있습니다.

 

6. 메시지 브로커

Redis는 Pub/Sub 모델을 지원하여 메시지 브로커로 활용됩니다. 다양한 시스템 간에 메시지를 신속하게 전달할 수 있어서 실시간 통신에 적합합니다.

 

Redis 사용법

(1) 로컬 환경에서 레디스 호출

  • GCP Compute Engine(인스턴스)에 레디스를 설치해 인스턴스 메모리를 사용해 레디스를 사용하는 방법
  • 인스턴스의 메모리 여유가 있다면 비용 & 사용성 측면으로 좋음

(2) Cloud 서비스를 사용해 외부 자원을 사용

  • 레디스 랩 서비스를 사용

 

Redis 데이터 백업 방식

  • 메모리는 빠른 속도로 데이터를 저장 및 조회할 수 있다는 장점이 있지만, 메모리 특성상 저장된 데이터가 사라질 휘발성이 있습니다. 이를 보완하고자 데이터에 영속성을 제공해주고 있습니다. 즉, 메모리에 있는 데이터를 디스크에 백업하는 기능을 제공해줍니다. 크게 2가지 방식이 있습니다.

 

(1) RDB(Redis DataBase) 방식

  • 주기적으로 Redis 데이터베이스의 스냅샷을 디스크에 저장하는 방식
  • 주로 백그라운드에서 실행되며, 특정 시점의 데이터 상태를 디스크에 저장하는 스냅샷 파일을 생성

특징

  1. 주기적 백업: 주로 주기적으로 설정된 시간 간격 또는 변경 사항이 발생한 경우에 백업이 수행됩니다.
  2. 단일 파일: 백업은 하나의 파일로 저장되며, 이 파일은 압축되어 디스크에 저장됩니다.
  3. 복원 시간: RDB 방식은 전체 데이터를 한 번에 저장하기 때문에 복원 시간이 비교적 짧습니다.
  4. 자주 변경되지 않는 데이터에 적합: 데이터가 자주 변경되지 않는 경우에 적합하며, 스냅샷을 생성하는 데 CPU 및 IO 부하가 크게 발생하지 않습니다.

 

(2) AOF(Append-Only File) 방식

  • AOF는 Redis에 수행된 모든 쓰기 연산을 파일에 기록하는 방식
  • 기록된 명령어들을 순차적으로 실행하여 데이터 복원

특징

  1. 실시간 기록: 명령이 수행될 때마다 해당 명령을 파일에 기록합니다.
  2. 재실행 가능성: AOF 파일은 명령어의 순차적인 로그이기 때문에 Redis 서버가 비정상적으로 종료되더라도 AOF 파일을 통해 데이터를 복원할 수 있습니다.
  3. 파일 크기: AOF 파일이 계속 커지는 것을 방지하기 위해 백그라운드에서 주기적으로 AOF 파일을 최적화하는 작업을 수행할 수 있습니다.
  4. 읽기 부하: RDB에 비해 AOF는 읽기 부하가 높을 수 있으나, Redis는 읽기에 대한 성능을 최적화하고 있습니다.

 

선택 기준

  • RDB 사용 시: 주로 스냅샷을 자주 찍지 않아도 되는 경우 또는 백업 파일 크기가 크게 중요하지 않은 경우에 적합합니다.
  • AOF 사용 시: 데이터의 안정성이 중요하거나, 복원 가능성이 높아야 하는 경우에 적합합니다. 또한, 파일 크기를 최적화하고자 할 때도 사용됩니다.

 

마무리

Redis는 뛰어난 성능, 다양한 데이터 구조 지원, 메모리 기반의 저장 등의 특징으로 많은 개발자들에게 선호되는 NoSQL 데이터베이스 중 하나입니다. 적절한 사용 사례에서 Redis를 활용하면 효율적이고 높은 성능의 시스템을 구축할 수 있습니다.

 

 

 

 

 

그럼 다음 시간에 봐요 ~

 

 

 

베빠 ~ 😊

댓글