Redis?
- 레디스는 REmote DIctionary Server 의 약자
- 한글 그대로 변역하면 원격 사전 서버 이다.
- database, cache, message broker으로써 사용되는 서버이다.
- In-memory 데이터 저장소이며, key-value 기반의 NoSQL DBMS 이다.
- In-memory 데이터 저장소란
- 데이터 스토리지의 메인 메모리에 설치되어 운영되는 데이터베이스 관리 시스템이다.
- 인 메모리 데이터베이스는 디스크에 최적화된 데이터베이스 보다 빠른다, 그 이유는 디스크 접근보다 메모리접근이 훨씬 빠르기 때문이다.
- 이러한 이유로 덜 변경되고, 자주 조회되는 데이터를 캐시용도로 사용하는데 주로 사용된다.
지원 자료형
STRING
- 모든 종류의 문자열을 Key-Value 형태로 저장할 수 있다.
[set / get] [key] [value]
형태로 사용된다.
LIST
- 일반적인 Linked List의 특징을 가지고 있다.
- 수백만 건의 데이터가 있더라도 Head와 Tail에 값을 추가 할 때에는 동일한 시간(O(n))이 걸린다.
- 특정한 값이나 인덱스로 데이터를 조회하거나 삭제할 수 있다.
- Pub/Sub 패턴에 사용된다.
- push command :
[LPUSH/RPUSH] [list_name] [value]
- pop command :
[LPOP/RPOP] [list_name]
HASH
- file-value 쌍을 사용한 일반적인 해시
- key에 대한 filed 개수는 제한이 없다.
- hash 구조이기 때문에 조회시, 뛰어난 성능을 가진다.
- hset command :
[hset] [hash_name] [filed] [value]
- hget command :
[hget] [hash_name] [filed]
SET
- 중복을 허용하지 않는 자료형이다.
- 교집합, 합집합, 차집합 연산을 레디스에서 수행할 수 있다.
- sadd comannd :
[sadd] [key][**member**]
- smember command :
[**smembers] [member]**
SORTED SET
- 중복되지 않는 여러 멤버를 저장하지만, 각각의 멤버는 스코어를 가지며 이값으로 정렬되는 자료형이다.
- 정렬된 형태로 저장되기 때문에 인덱스를 이용하여 빠르게 조회할 수 있다.
- SCORE는 반드시 숫자여야 한다.
- zadd command :
[zadd] [key] [score] [member]
- zrangebylex command :
[zrangebylex] [key] [min] [max]
그 외 bit/bitmap, hyperloglogs, Geospatial indexes, Stream 의 자료구조가 존재한다.
Pub/Sub
- 특정한 topic(주제)에 대하여 해당 topic을 구독한 모두에게 메시지를 발행하는 통신 방법
- 구독한 수신자 모두에게 메시지를 전송하는 것을 의미
- 메시지를 클라이언트에게 던지는(throw) 시스템이기 때문에 메시지를 저장하지 않는다.
- 즉 수신자가 메시지를 받는 것을 보장하지 않는다.
현재 접속중인 클라이언트에게 간단한 메시지를 빠르게 보내고 싶을 때, 그리고 전송된 메시지를 따로 저장하거나 수신확인이 필요없을 때, 마지막으로 100% 전송 보장은 하지 않아도 되는 메시지를 보낼 때 이용
센티넬
- 운영환경에서 레디스는 일반적으로 마스터와 복제로 구성된다.
운영 중 마스터에 생기면, 관리자가 이를 감지해 복제를 마스터로 올리고 클라이언트에게 새로운 마스터에 접속할 수 있도록 해주어야 한다.
- 센티넬은 마스터와 복제를 감시하고 있다가 마스터가 다운되면 이를 감지해서 관리자의 개입 없이 자동으로 복제를 마스터로 올려준다.
주요기능
- 모니터링 : 마스터, 복제들을 지속적으로 감시
- 자동 장애 조치 : 마스터가 다운되었을시, 복제를 마스터로 승격
- 알림 : 레디스 인스턴스들이 fail-over 되었을 때 pub/sub 으로 어플리케이션에 알리거나 관리자에게 이메일 or SMS로 알릴 수 있다.
클러스터
성능 향상 기법
- 스케일 업(Scale Up) : 단일 머신에 CPU, 디스크 등을 추가해서 물리적인 성능을 향상 시키는 것 - 수직적
- 스케일 아웃(Scale Out) : 적절한 성능의 머신을 추가해서 전체적인 성능을 향상하는 방법 - 수평적 , 소프트웨어가 scale out을 지원해야 함
대량 데이터 처리, 저장 방법
- 데이터 파티셔닝 : 대량의 데이터를 처리하기 위해 DBMS 안에서 분할하는 방식
- 데이터 샤딩 : 대량의 데이터를 처리하기 위해 여러 개의 DBMS에 분할하는 방식
Redis Cluster를 통해 얻을 수 있는 이점
레디스 클러스터 목표
- 1000대의 노드까지 확장할 수 있도록 설계
- 노드 추가, 삭제 시, 레디스 클러스터 전체를 중지할 필요 없고 키 이동 시에만 해당 키에 대해서만 잠시 멈출 수 있다.
- 센티넬 기능을 포함하고 있다.
- 클러스터 제한 사항 - MSET 같은 멀티 키 명령어는 제한된다.