상세 컨텐츠

본문 제목

Redis 개념 및 특징, 메모리 정책

CS/CS

by Chan.94 2024. 9. 1. 08:00

본문

반응형

 

Redis란?

Remote Dictionary Server의 약자로, key-value 구조를 가진 NoSQL 데이터베이스다.

MySQL, Oracle 같은 일반 데이터베이스와 다르게 디스크(SSD, HDD)에서 데이터를 처리하는 것이 아니라, 
In-Memory(인메모리) 기반의 데이터베이스로 메모리(RAM)에서 데이터를 처리하기 때문에 작업 속도가 월등히 빠르다.


Redis 주요 특징

  • key-value 쌍의 형태로 데이터를 저장, 조회, 업데이트하며, key에 만료 기한을 설정할 수 있다
  • 데이터를 디스크에 저장하지 않고 메모리에 저장하므로 데이터 액세스와 처리 속도가 DB보다 빠르다
  • 문자열, 리스트, 해시, set, sorted set 등의 형태로 value를 저장할 수 있다.

기존 DB가 있는데도 왜 Redis를 사용하는가?

  • 고속 성능
    • Redis는 데이터를 메모리(RAM)에 저장하여, 읽기 및 쓰기 작업이 매우 빠르다. 이는 밀리초 수준의 응답 시간이 중요한 애플리케이션에 적합하다.

    • 수백만 건의 요청을 초당 처리할 수 있는 성능을 자랑하며, 높은 처리량과 낮은 지연 시간을 제공한다.

  • 다양한 데이터 구조 지원
    • 문자열뿐만 아니라 리스트, 셋, 해시, 정렬된 집합 등의 다양한 데이터 구조를 지원한다. 이는 복잡한 데이터 모델링을 간편하게 할 수 있게 해 준다.

    • 복잡한 데이터 구조를 효율적으로 처리할 수 있어, 관계형 데이터베이스에서 다루기 어려운 비정형 데이터를 쉽게 관리할 수 있다.

  • 캐싱
    • 데이터베이스의 결과나 웹 페이지의 일부를 캐싱하여, 응답 시간을 단축하고 데이터베이스 부하를 줄일 수 있다.
    • 각 키에 대해 만료 시간을 설정할 수 있어, 캐시 데이터를 자동으로 관리할 수 있다.
  • 세션 관리
    • 여러 서버 간에 세션을 공유할 수 있어, 분산된 환경에서 유용하다.
  • Pub/Sub 메시징
    • Pub/Sub 모델을 지원하여, 메시지 발행자(Publisher)와 구독자(Subscriber) 간의 실시간 메시징을 구현할 수 있다. 이는 채팅 애플리케이션, 실시간 알림 시스템 등에 유용하다.

  • 확장성
    • 클러스터링을 통해 데이터를 여러 노드에 분산시켜 저장하고 처리할 수 있어, 대규모 트래픽을 처리할 수 있다.
  • 영속성
    • 데이터를 디스크에 저장할 수 있는 옵션을 제공한다.
      이를 통해 서버가 재시작되거나 시스템이 종료되더라도 데이터를 복구할 수 있다.

      RDB(Redis Data Base) : 설정된 간격으로 데이터 세트의 특정 시점 스냅샷을 수행한다.
      AOF(Append-Only File) : 서버에서 수신한 모든 쓰기 작업을 기록한다.
    • 이 기능 장애의 주원인이 되기도 한다.
  • 쉽고 간편한 사용
    • Redis는 단순한 명령어를 통해 쉽게 사용할 수 있어 복잡한 설정이나 관리가 필요하지 않다.

메모리가 가득 찾을 때 어떻게 동작하는가?

Redis에 데이터를 저장할 때 Expire Time을 지정하여 일정시간이 지나면 데이터가 삭제될 수 있도록 할 수 있다.
그러나 Expire Time을 긴 시간으로 지정하거나 또는 Expire Time을 지정하지 않을 경우 Redis 서버의 지정된 Memory가 가득 차게 된다.

 

따라서, Redis에 메모리의 데이터가 MAXMEMORY-POLICY 설정의 따라 데이터를 유지 또는 삭제하는 설정이 필요하다.

 

MAXMEMORY-POLICY

MAXMEMORY-POLICY

noeviction (default)

MAXMEMORY-POLICY : noeviction

 

MAXMEMORY-POLICY 기본 정책이다. 메모리에 데이터가 가득 차면 Redis에 새로운 키를 저장하지 않는다. 즉, 메모리가 가득 차면 Redis의 새로운 데이터를 입력하는 게 불가능하기 때문에 서비스 장애가 발생할 수 있다.

 

 volatile-lru

MAXMEMORY-POLICY : volatile-lru

 

Expire Time이 설정된 키 중에서 가장 오래도록 사용하지 않았던 키를 삭제한다.

메모리에 데이터가 모두 가득 차고 Expire Time 설정값이 없는 키만 남은 경우 Redis의 새로운 데이터를 입력하는 게 불가능하기 때문에 서비스 장애가 발생할 수 있다.

 

allkey-lru

모든 키 중에서 가장 오래도록 사용하지 않았던 키를 삭제한다. 초기 세팅 중 가장 권장하는 설정이다.


일반적인 Redis 사용법 - (캐싱 서버)

많이 사용되는 방식 중 하나는 레디스를 바로 캐싱 서버로만 사용하는 것이다.
작게는 토큰 등을 통해 계정 인증 정보 등을 저장하는 용도로 사용될 수 있다. 이때 데이터의 사용 기한을 설정할 수 있는 expire 기능이 유용하다.

크게는 많이 조회되는 DB 데이터를 캐싱하는 용도로도 사용할 수 있다. 한 번 불려 온 데이터는 비교적 빠르게 조회할 수 있도록 캐싱하는 것이다.

Redis를 활용할 때 중요한 것은, 휘발성이 강한 Redis의 특성을 고려하여 유실되어도 비교적 무방한 데이터들을 저장하여 사용하도록 하는 것이다.

 

반응형

관련글 더보기

댓글 영역

>