[DB] Redis 란? (feat. Memcached)
레디스 (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 알고리즘에 따라 데이터 삭제 |
데이터 타입 | 다양한 데이터 타입 지원 | 문자열만 지원 |