Redis

hansol yoo·2022년 12월 6일
0

Redis ?

  • key, value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반 비관계형 데이터베이스 관리 시스템
  • 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소
  • db-engines.com 에서 key, value 저장소 중 가장 순위가 높다
  • 레디스를 이해하기 위해 다음 두 개념을 우선적으로 살표보자.

인메모리 데이터 구조

In-Memory DB

IMDB, 혹은 MMDB(Main Memory DBMS) 라고도 한다.

디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스.

In-Memory DB의 장점

  1. 디스크검색보다 자료접근이 훨씬 빠른것이 가장 큰 장점이다.
  2. 데이터양의 증가로 DB 응답속도가 떨어지는 문제를 해결할 수 있는 대안이 인메모리 데이터베이스
  3. 디스크방식은 저장된 데이터를 대상으로 쿼리를 수행하지만 인메모리 방식은 메모리상에 색인을 넣어 필요한 모든 정보를 메모리상의 색인을 통해 빠르게 검색이 가능하다.

In-Memory DB의 단점

  1. 매체가 휘발성이다(DB전원이 갑자기 꺼지면 자료들이 삭제된다.)
  2. 로그인 세션과같은 서버가 꺼져서 날아가도 상관없는 임시 데이터에 주로 쓰인다.
  3. 데이터에 비해 RAM 용량이 넉넉하지 않을 경우 가상메모리를 쓰게 되어 역효과가 날 수 있다.

주요 제품

  • Amazon ElastiCache
  • Redis
  • 알티베이스
  • Kairos 등

캐시서버

Redis 와 같은 인메모리 데이터 구조 저장소를 사용하는 이유??

  1. 데이터베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 문제가 발생하여도 데이터가 손실되지 않는다.
  2. 하지만 매번 디스크에 접근해야하기 때문에 사용자가 많아질수록 부하가 많아져 느려질 수 있다.
  3. 서비스 운영 초기나 규모가 작은 서비스의 경우 WEB-WAS-DB 구조로도 데이터 베이스에 무리가 없다.
  4. But! 사용자가 늘어나면 데이터베이스가 과부하 될수 있기 때문에 캐시서버를 도입하여 사용한다. 그리고 이 캐시서버로 사용할 수 있는것이 바로 Redis 이다.
  • 캐시는 한번 읽어온 데이터를 임의 공간에 저장하여 다음에 읽을때는 빠르게 결과값을 받을 수 있도록 도와주는 공간
  • 같은 요청이 여러번 들어오는 경우 매번 데이터베이스를 거치는 것이 아닌 캐시 서버에서 첫번째 요청 이후 저장된 결과값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있다.

캐시서버의 패턴

  • Look aside cache

    1. 클라이언트가 데이터를 요청
    2. 웹서버는 데이터가 존재하는지 캐시서버에 먼저 확인
    3. 캐시서버에 데이터가 있으면 DB에서 데이터를 조회하지 않고 캐시서버에 있는 결과값을 클라이언트에게 바로 반환 (Cache Hit)
    4. 캐시서버에 데이터가 없으면 DB에 데이터를 조회하여 캐시서버에 저장하고 결과값을 클라이언트에게 반환 (Cache Miss)
  • Write Back

    1. 웹서버는 모든 데이터를 캐시 서버에 저장
    2. 캐시서버에 특정 시간동안 데이터가 저장됨
    3. 캐시서버에 있는 데이터를 DB에 저장
    4. DB에 저장된 캐시서버의 데이터를 삭제

Redis의 특징

  1. Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
  2. 데이터를 디스크에 쓰는 구조가 아닌 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
  3. String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원한다.
    • String : 가장 일반적인 key-value 구조의 형태
    • Sets : String의 집합. 여러개의 값을 하나의 value 에 넣을 수 있다.
    • Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조
    • Lists : Array 형식의 데이터 구조. List를 사용하면 처음과 끝에 데이터를 넣고 빼는건 빠르지만 중간에 데이터를 삽입하거나 삭제하는것은 어렵다.
  4. Single Threaded로 한번에 하나의 명령만 처리할 수 있다. 중간에 처리시간이 긴 명령어가 들어오면 그 뒤 명령어들은 모두 앞에 있는 명령어가 처리될때까지 대기한다.

Redis 사용시 주의점

  1. 서버에 장애가 발생했을 경우에 대한 대비책이 필요하다.
    • 인메모리 데이터 저장소 특성상 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문
  2. 메모리 관리가 중요하다.
  3. 싱글 쓰레드의 특성상 한번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피하는 것이 좋다.

0개의 댓글