레디스 (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 기능을 통한 복구 방식을 주의해서 작성해야 데이터 유실에 대비할 수 있다.