DB

[DB] Redis 란? (feat. Memcached)

코리늬 2020. 11. 30. 16:48

레디스 (Remote Dictionary Server)는 메모리 기반의 key-value 구조의 데이터 관리 시스템이다.

모든 데이터를 메모리에 저장하고 조회하기때문에 빠른 Read, Write 속도를 보장하는 NoSql이다.

속도가 빠른 이유 ?

메모리 접근이 디스크 접근 방식보다 빠르기 때문.

 

Redis의 기능

  • In-Memory 캐싱
  • Pub/Sub 메세지 큐
  • 세션 스토어

Redis가 지원하는 데이터 형식

  • String
  • Set
  • Sorted Set
  • Hash
  • List

Redis의 특징

  • 영속성을 지원하는 In-memory 데이터 저장소

  • 읽기 성능 증대를 위한 서버 복제 지원

    Redis가 실행중인 서버에 장애가 발생하는 경우 장애 조치와 더 높은 읽기 성능을 지원하기 위해 슬레이브가 마스터에 연결되고, 전체 DB의 초기 복사본을 마스터 -> 슬레이브 복제를 지원한다.

    마스터에서 쓰기가 수행되면 슬레이브 데이터 세트를 실시간으로 업데이트하기 위해 슬레이브로 모든 데이터가 전송된다.

  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원

샤딩(Sharding)

간단히 말해서, 같은 테이블의 스키마를 가진 데이터를 다수의 데이터베이스에 분산 저장 하는 방법

  • 다양한 데이터 형식을 지원한다(위에서 언급).

 

Redis의 장점

  • 리스트, 배열과 같은 데이터를 처리하는데 유용

    value 값으로 다양한 데이터 형식을 지원하기 때문

  • 리스트형 데이터 입력과 삭제가 MySql에 비해 10배정도 빠르다.

    여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청하는 경우, 데이터 부정합 방지 Atomic 처리 함수를 제공한다(원자성).

  • 메모리를 활용하면서 영속적인 데이터 보존(Persistence)

    명령어로 명시적 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.

    스냅샷 기능을 제공해 메모리 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.

    AOF : Redis의 모든 Wirte/Update 연산을 log 파일에 기록 후 서버 재시작 시 순차적으로 재실행, 데이터 복구

  • 1개의 싱글 쓰레드로 수행되기 때문에, 서버 하나에 여러개의 Redis Server를 띄울 수 있다.(Master-Slave 구조)

    master-slave 간의 복제는 non-blocking

 

Redis 단점

In-memory 방식이기 때문에 장애 발생시 데이터 유실이 발생한다.

따라서 영속적인 데이터 보존을 위해 스냅샷과 AOF 기능을 통한 복구 방식을 주의해서 작성해야 데이터 유실에 대비할 수 있다.

 

Redis vs Memcached

분류 Redis Memcached
처리속도 데이터가 디스크메모리에 저장되는데 Memcached와 성능 차이가 없음, 빠름 데이터가 메모리에만 저장, 빠름
데이터 저장 방식 데이터가 디스크에도 저장이 되기 때문에 데이터 복구 가능 데이터가 메모리에만 저장되기 때문에 프로세스가 죽거나, 장애 발생시 데이터 사라짐
만료일 지정 방식 만료일을 지정하면 만료된 데이터는 캐시처럼 사라짐 동일
메모리 재사용 메모리를 재사용하지 않음, 명시적으로만 데이터 제거 가능 저장소 메모리를 재사용. 만료전에 더 이상 데이터를 넣을 메모리가 없으면 LRU 알고리즘에 따라 데이터 삭제
데이터 타입 다양한 데이터 타입 지원 문자열만 지원