본문 바로가기
Delvelopment/Redis

Redis의 자료형, 특징과 시간복잡도 그리고 클러스터

by 제제킴 2021. 3. 10.
반응형

Redis

  • Redis
    • 레디스(Redis)는 Remote Dictionary Sever의 약자로 Key-Value 구조로 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다. BSD라이선스를 따른다. Redis는 가장 인기 있는 key-value 저장소이다.
    • 외부층에서 Redis의 데이터 모델은 Key를 Value에 매핑하는 자료구조의 디렉토리 이다. Redis 그리고 기타 구조화된 스토리지 시스템 사이의 주요 차이점 중 하나는 Redis는 스트링뿐만 아니라 자료구조의 추상적 자료형(abstract Data)도 지원을 한다는 점이다.
      • 문자열의 리스트
      • 문자열의 집합 (반복되지 않고 정렬되지 않은 요소의 집합)
      • 문자열의 정렬된 집합 (스코어라고 불리는 부동소수점의 지시를 받는 반복되지 않는 요소의 집합)
      • 키와 밸류가 스트링인 해시
  • 특징
    • 영속성을 지원하는 인메모리 데이터 저장소
    • 읽기 성능 증대를 위한 서버 측 복제를 지원
    • 쓰기 성능 증대를 위한 클라이언트 측 샤딩을 지원
    • 5가지 데이터형 (String, Set, Sorted Set, Hash, List) 을 지원
    • 메모리 이외의 영구 저장소를 지원하므로 인스턴스 재시작에 대한 캐시 웜업에 대한 고려가 필요하지 않음.
  • 기본 명령어.
    • 문자열 명령 레디스의 증감처리는 signed integer로 표현할 수 있는 범위에서만 가능. 표현범위를 넘어설 경우 overflow 발생.
    • 문자열 데이터의 최대 크기는 512MB
  • set
    • 주어진 키에 값을 저장
  • append
    • 키가 존재하면 append 아니면 set과 동일
  • incr
    • 증가연산 (1씩 숫자만)
  • decr
    • 감소연상 (1씩 숫자만)

→ Redis 명령어들의 시간복잡도는 O(1) 이다.

반응형
  • Redis의 시간복잡도.
    • Redis는 Single Thredaded 구조이다. 따라서 동시에 처리할 수 있는 명령어의 갯수는 한번에 1개이다. 하지만 빠른속도로 조회할 수 있다. 단순한 get, set 명령어는 초당 10만개를 처리할 수 있다.
    • 하지만, 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어는 대기 상태로 전환된다. 최악의 경우는 Redis가 훨씬더 느린 상황까지도 발생할 수 있다.
    • 주의할 명령어
      • Keys
        • 모든 key를 조회한다.
      • FulshaALL, FlushDB
        • 데이터를 모두 삭제한다.
      • Delete Collections
        • Collection을 전부 삭제.
      • Get All Collections
        • Collection을 전부 조회.
      위 명령어들은 운영하면서 사용하지 못하게 막아 놓는다. 위 명령어 때문에 서비스가 느려질 수 없으니..

클러스터

복제

프라이머리 노드(쓰기 전용)와 세컨더리 노드(읽기 전용)를 구성하여 트래픽을 분산하는 기법

  • 세컨더리 노드는 언제든지 확장이 가능하다 (데이터 복제 요청을 세컨더리 노드가 프라이머리 노드에게 요청하기 때문에 프라이머리 노드의 무중단이 보장됨)단, 세컨더리 노드가 처음 올라올 때 프라이머리 노드의 모든 데이터를 복제해야 하는데 이때 최대한의 리소스를 사용하기 때문에 복제하는 동안에 프라이머리 노드의 성능이 저하될 수 있다.
  • 프라이머리 노드에 쓰기 작업이 발생하면 세컨더리 노드에 변경 이벤트를 전파하여 데이터 일관성을 유지한다.
  • 노드를 복제 한다고 해서 성능이 선형으로 증가하지는 않는다 (데이터 대역폭, 네트워크 대역폭, 데이터 동기화 작업) 이를 임계점이라고 함
  • 레디스 클라이언트에서 쓰기/읽기 노드를 모두 알고 있어야 한다

샤딩

데이터를 특정 조건에 따라 나누어 저장레디스 2.6 버전은 서버측 샤딩을 지원하지 않기 때문에 위치 투명성이 보장되지 않는다. (클라이언트측 샤딩 기법을 이용해야 함)

  • 수직 샤딩 (Vertical Sharding) 데이터 성격에 따라 분리
  • 범위 샤딩 (Range Sharding) 데이터의 범위에 따라 분리
  • 해시 기반 샤딩 (Hash Based Sharding) 키값을 해싱하고 해싱된 값을 이용하여 저장소를 선택하는 방법으로 일관된 해싱(Consistent Hashing)이라고 부르기도 함

 

 

(참고)

ko.wikipedia.org/wiki/%EB%A0%88%EB%94%94%EC%8A%A4

jehuipark.github.io/study/redis-study

 

 

2020.03.13 - [Delvelopment/Redis] - REDIS Key Evict 하는 두가지 방법 (키 삭제, 키 초기화)

2020.03.13 - [Delvelopment/Redis] - REDIS 명령어 (keys, Scan, get, flushall, Del 등)

2020.03.13 - [Delvelopment/Redis] - 커머스서비스에서 동접자 대응을 위한 REDIS 도입기.

 

반응형

댓글