Redis를 알아보자

Doyeon·2023년 3월 26일
0
post-thumbnail

Redis란?

  • 오픈소스 기반의 인메모리 데이터베이스
  • key-value 구조를 사용하여 데이터를 저장한다.
  • 메모리에 데이터를 캐싱하여 빠른 읽기와 쓰기를 지원한다.
  • 다양한 데이터 구조를 지원한다.
  • 캐싱, 세션 관리, 실시간 분석 등 다양한 용도로 사용된다.

Redis를 알아보기 전, 캐시 서버(Cache Server)에 대해서

데이터베이스는 물리 디스크에 데이터를 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야하므로 사용자가 많아질수록 부하가 많아져서 느려질 수 있다.

일반적으로 서비스 규모가 작거나, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터베이스에 무리가 가지 않지만, 사용자가 늘어난다면 데이터베이스에 과부하가 걸릴 수 있으므로, 이때 캐시 서버를 도입하여 사용한다.

이 캐시 서버로 이용할 수 있는 것이 바로 Redis 이다.

  • 캐시 : 한번 읽어온 데이터를 임의의 공간에 저장 → 다음에 읽을 때 빠르게 결과값을 받을 수 있도록 한다.
  • 같은 요청이 여러번 들어오는 경우, 데이터베이스를 거치지 않고 캐시 서버에서 첫번째 요청으로 저장된 결과값을 바로 내려줄 수 있다.

Redis의 특징

  • 인메모리 데이터 저장
    • Redis는 인메모리 데이터 저장소로, 기본적으로 RAM(메모리)을 사용하여 데이터를 저장한다.
    • 빠른 속도로 데이터를 처리할 수 있다.
  • 다양한 데이터 구조 지원
    • String, Hash, List, Set 등 다양한 데이터 구조를 지원한다.
    • 다양한 데이터 구조를 이용하여 데이터를 저장, 조회, 수정, 삭제할 수 있다.
  • 영속성 지원
    • Redis는 기본적으로 메모리에 데이터를 저장하지만, 디스크에도 지속적으로 저장할 수 있다. → snapshotting
      • Snapshotting : Redis의 내장 스냅샷 기능을 사용하여 일정 시간 간격으로 Redis 데이터를 디스크에 저장한다.
    • AOF(Append Only File) 방식 지원
      • AOF : Redis의 모든 쓰기 작업 로그를 기록, Redis를 재시작할 때 로그를 재실행하여 데이터를 복원한다.
    • 스냅샷과 AOF를 통해 데이터 손실을 방지하고 안정성을 높일 수 있으나, Redis의 성능을 약간 저하시키는 부분이 있기 때문에, 주기적인 스냅샷과 AOF 파일의 백업, 로그를 특정 크기 이상으로 허용하는 등 설정을 고려해야 한다.
  • 분산 환경 지원
    • 클러스터링을 통해 분산 환경에서도 사용 가능하다.
      • Redis 클러스터링 : 여러 대의 Redis 서버를 하나의 클러스터로 묶어서 데이터를 분산 저장한다. 이를 통해 확장성과 가용성을 향상시킬 수 있다.

장점

  • 높은 성능
    • Redis는 인메모리 데이터 저장소로 작동하므로 빠른 속도로 데이터를 처리할 수 있다.
    • 비동기 방식으로 데이터를 처리하므로 성능이 향상된다.
  • 데이터 구조 다양성
    • Redis는 다양한 데이터 구조를 지원하므로, String, List, Hash, Set 등을 통해 데이터를 쉽게 처리할 수 있다.
  • 데이터 복제 및 분산
    • Redis는 데이터 복제를 지원한다.
    • 클러스터링을 통해 데이터를 분산 처리할 수 있다.
  • 데이터 안정성 (영속성 유지)
    • Redis는 스냅샷 및 AOF 방식을 지원하여 데이터 손실을 방지할 수 있다.

단점

Redis의 가장 큰 단점은 용량이다. Redis는 메모리에 데이터를 저장하는데, 메모리 용량이 디스크에 비해 크지 않기 때문에 대용량의 데이터를 Redis로만 처리하기에는 무리가 있다.

  • 메모리 제약
    • Redis는 모든 데이터를 메모리에 저장하기 때문에, 메모리 용량이 부족한 경우 데이터 저장 및 처리에 문제가 발생할 수 있다.
  • 단일 쓰레드
    • 복잡한 작업에 대해 처리 속도가 떨어질 수 있다.
    • 특정 연산에 대해 블로킹이 발생할 수 있어 다중 요청 처리에 제한이 있다.
  • 디스크 I/O 성능 저하 위험
    • Redis는 데이터를 디스크에 저장하지 않지만, RDB 파일과 AOF 파일을 사용하여 백업을 생성한다. 이러한 파일이 I/O 성능에 영향을 미칠 수 있다.

Redis 사용 사례

  • 좋아요 처리
  • 사용자 세션관리
  • 유저 인증 토큰 저장
  • 메시지 큐잉
  • 최근 검색 목록

찾아보면서 생긴 질문들

  • Redis는 메모리 기반의 데이터베이스이기 때문에 메모리 제약이 있다는 단점이 있다. 많은 양의 데이터를 저장해야 하면서 캐시도 필요한 경우에는 어떻게 해야하는가?
    • 데이터 중 일부만 Redis로 저장한다.
      • 캐시로 사용할 일부 데이터만 Redis에 저장하여 사용할 수 있다.
      • Redis에 저장할 데이터의 중요도에 따라 우선순위를 정하여 저장할 수 있다.
    • Redis 클러스트를 사용한다.
      • Redis 클러스트를 사용하면 데이터를 여러 대의 서버에 분산하여 저장할 수 있다.
      • 각 서버에 일부 데이터만 저장하게 되어 메모리 제약을 완화시킬 수 있다.
    • LRU(Least Recently Used) 알고리즘을 사용한다.
      • 가장 최근에 사용하지 않은 데이터를 자동으로 삭제하여 메모리 사용량을 조절할 수 있다.
      • LRU 방식으로 데이터를 삭제하여 Redis 메모리 사용량을 조절할 수 있다.
    • Redis와 디스크 기반 데이터베이스를 조합하여 사용한다. → 우리가 사용하게 될 방식
      • Redis에는 캐시로 사용할 일부 데이터만 저장하고, 디스크 기반 데이터베이스에 모든 데이터를 저장하여 사용할 수 있다.
      • Redis의 메모리 사용량은 줄이고, 모든 데이터를 저장할 수 있다.
  • Redis 말고 다른 인메모리 캐시 솔루션은 무엇이 있을까?

참고

Redis란? 레디스의 기본적인 개념 (인메모리 데이터 구조 저장소)
[DB] Redis란 무엇일까? 간단하게 알아보기!
[Redis] Redis 란 무엇인가?

profile
🔥

0개의 댓글