반응형
- 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을 전부 조회.
- Keys
클러스터
복제
프라이머리 노드(쓰기 전용)와 세컨더리 노드(읽기 전용)를 구성하여 트래픽을 분산하는 기법
- 세컨더리 노드는 언제든지 확장이 가능하다 (데이터 복제 요청을 세컨더리 노드가 프라이머리 노드에게 요청하기 때문에 프라이머리 노드의 무중단이 보장됨)단, 세컨더리 노드가 처음 올라올 때 프라이머리 노드의 모든 데이터를 복제해야 하는데 이때 최대한의 리소스를 사용하기 때문에 복제하는 동안에 프라이머리 노드의 성능이 저하될 수 있다.
- 프라이머리 노드에 쓰기 작업이 발생하면 세컨더리 노드에 변경 이벤트를 전파하여 데이터 일관성을 유지한다.
- 노드를 복제 한다고 해서 성능이 선형으로 증가하지는 않는다 (데이터 대역폭, 네트워크 대역폭, 데이터 동기화 작업) 이를 임계점이라고 함
- 레디스 클라이언트에서 쓰기/읽기 노드를 모두 알고 있어야 한다
샤딩
데이터를 특정 조건에 따라 나누어 저장레디스 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 도입기.
반응형
'Delvelopment > Redis' 카테고리의 다른 글
[REDIS] Sorted Set 명령어 정리 (0) | 2021.08.06 |
---|---|
캐시(Cache) Local Cache & Global Cache (0) | 2021.03.11 |
REDIS Key Evict 하는 두가지 방법 (키 삭제, 키 초기화) (0) | 2020.03.13 |
REDIS 명령어 (keys, Scan, get, flushall, Del 등) (0) | 2020.03.13 |
커머스서비스에서 동접자 대응을 위한 REDIS 도입기. (0) | 2020.03.13 |
댓글