ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Redis] Redis 소개와 특징
    📖 개발 공부/redis 2023. 8. 4. 21:50

    패스트캠퍼스의 "백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리 초격차 패키지 Online." 강의와 그외에 추가로 정리한 내용입니다.

    목차

    1. Redis의 정의
    2. In-memoryDB로서의 Redis

    3. Key-value store로서의 Redis
    4. Redis 사용 사례

     

    Redis의 정의

    • Remote Dictionary Server (원격 Dictionary 방식으로 데이터를 저장하는 서버)
    • Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어이다.
    • Storage: 데이터 저장소(데이터 관점)
      프로그램이 종료되더라도 데이터가 남아있게 된다.
    • Database: 전통적은 DBMS의 역할을 수행 (영속성 관점)
      • 영속성: 데이터 저장해두고 유실하지 않도록 한다.
      • 데이터 저장소 관점에서 비슷한 역할을 수행한다. 추가적인 백업 방식을 이용해 어느정도 영속성을 제공한다.
    • Middleware: 어플리케이션이 이용할 수 있는 유용한 기능을 제공하는 소프트웨어

     

    In-memoryDB로서의 Redis

    In-memory DB란?

    • 데이터를 디스크에 저장하지 않는다.
    • 휘발성인 RAM에 저장한다.
    • 빠른 속도를 제공한다.

     

      Read Write 비교
    HDD 130 MB/s 120 MB/s  
    SDD 500 MB/s 450 MB/s HDD보다 3~4배 빠름
    RAM 20,000 MB/s 20,000 MB/s SSD보다 40배 빠름

     

    빠른 속도와 이 휘발성 문제는 어떻게 절충시킬까?

    빠른 속도와 휘발성의 절충

    1) 용도에 맞게 DB와 Redis 를 사용한다.

    • Redis: 세션 데이터 같은 단기적인 데이터를 저장하는 것.라이프 사이클을 짧게 가져가는 데이터
      → 유저에게 미치는 영향: 로그인 상태가 풀리는 것 (영향 크게 받지 않음)
    • DB: 유저의 계좌 정보같이 바뀌면 큰 문제를 야기하는 데이터(영속성, 무결성을 크게 요구하는 케이스) 

     

    2) 혼합해서 사용한다 (Cache)

    • for 어플리케이션과 DB 사이에서 디스크 접근 횟수를 줄이기 위해

     

    3) Redis의 영속성을 확보한다 (백업 등)

    • 하지만 정말 무결성이 중요한 데이터는 DB를 쓰고 있다.

    Key-value store로서의 Redis

    데이터 저장소의 구조

    • 프로그램 언어에서의 데이터 구조(Array, List, Map, 등)
      각각 다른 인터페이스와 성능을 가지고 있다.
    • DB의 데이터 모델 관점에서의 구조 (네트워크 모델, 계층형 모델(Tree), 관계형 모델, …)

    key-value store란?

    • 특정 값을 key로 해서 그와 연관된 데이터를 value로 저장한다. (=Map)
    • 가장 단순한 데이터 저장 방식이다.
    • 단순한 만큼 빠르고 성능이 좋다.

    장점

    • 단순성에서 오는 쉬운 구현과 사용성
    • Hash를 이용해 값을 바로 읽어서 속도가 빠르다.
    • 분산 환경에서의 수평적 확장성
      • DB에 데이터가 많아졌을 때 이 데이트를 논리적이거나 물리적으로 다른 머신/다른 지역에 수평적으로 늘리는 것을 뜻한다. → 스케일링
      • 여기서 큰 강점이 있다.

    단점

    • key를 통해서만 값을 읽을 수 있다.
      • 데이터 검색 불가.
      • 범위 검색 등의 복잡한 질의가 불가능하다.

    key-value 스토어의 활용

    • 언어의 자료구조 (Java의 HashMap 등)
    • NoSQL DB (Redis, AWS DynamoDB)
    • 단순한 구조의 데이터로 높은 성능과 확장성이 필요할 때 사용한다.

     

    Redis 사용 사례

    Cache (캐싱)

    • 다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여준다.

    Session Store (세션 관리)

    • Redis는 세션 관리 작업에 매우 적합하다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요하다.

    Limit Rater (속도 제한)

    • ex) 특정 api의 분당 호출 수 제한
    • Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용된다.

    대기열

    • ex) 여러 서버들 간의 task job을 저장해놨다가 한쪽에서 소비해가고.. 이런 형태
    • Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있다. Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합하다.
    • 다음에 실습해봐야징

    채팅 및 메시징

    • Redis에서는 pub/sub 기능을 지원한다. pub/sub 를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있다.

     

    기존에는 개발 방식이 RDB 를 이용해서 복잡한 데이터와 관계를 정의해서 저장하는 방식이었다면, 요즘에는 데이터를 단순화하고 분산을 많이 시킬 수 있는 방법으로 변화하고 있다.

    → key-value store의 활용성이 커졌고, Redis가 많이 쓰이게 되었다.

     

     

    🔗 참고 링크

     

    Redis란 무엇입니까? – Amazon Web Services(AWS)

    Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원됩니다.

    aws.amazon.com

    728x90
    반응형

    댓글

Designed by Tistory.