반응형
Redis란?
Redis(REmote DIctionary System)는 NoSQL DBMS의 한 종류로, Key-Value 기반의 In-memory 데이터 저장소다.
모든 데이터를 Memory에 저장하여 속도가 매우 빠르다는 특징을 가지며, 다른 In-Memory 솔루션들과는 다르게 '다양한 자료 구조'를 지원한다.
Redis 주요 특징
- Single-thread 기반이며, Key-Value 구조의 형태로 데이터를 관리한다.
Single-thread 기반이라는 의미는, 명령어의 실행과 이벤트를 처리하는 Core 부분이 single-thread로 구성 및 동작하여 Atomic 처리를 보장한다는 것을 의미한다. - 별도의 시스템 명령들을 사용하는 전용 Sub-thread가 존재한다.
Redis 4.0 부터는 Main-thread 1개, Sub-thread 3개로 구성된다. - Redis 6.0.X 버전이 출시되면서 Threaded I/O를 아래와 같은 부분에 적용하여 성능이 일부 향상됐다.
- 클라이언트가 전송한 명령을 읽어 파싱하는 부분
- 처리된 명령의 결과 메시지를 클라이언트에 전달하는 부분 - 따라서 아래와 같은 형태의 Long-Time 명령을 수행하여 다른 명령어들을 처리할 수 없는 상태를 유의해야 한다.
- Keys: Redis에 존재하는 모든 Key를 조회 (Redis 매뉴얼에서도 운영환경에서는 사용하지 말 것을 권고 중이다.)
- Flushall: 전체 데이터를 지우는 것으로, Key 개수에 비례한 수행 시간을 초래한다. - 현재는 7.0.0 버전까지 나와 있으며, 7.0.0 버전에서는 다양한 기능 뿐 아니라 성능 향상을 위한 최적화가 진행되어 메모리 소비가 크게 감소했다.
- 모든 데이터가 메모리에 상주하여 처리되기 때문에, 속도가 상당해 빠른 편이다.
- 평균 읽기 또는 쓰기 속도가 1ms 미만이다. 물론 서버에 따라 다르지만 일반적으로 초당 수십만 건의 작업을 지원한다. - 데이터의 안전한 백업과 복구를 위해 다른 서버의 메모리에 실시간으로 복사본을 남기거나, 설정에 따라 아래와 같은 방식으로 디스크에 저장하고 복구할 수 있는 방법도 제공한다.
- RDB (Snapsot) 방식
- AOF (Append On File) 방식 - Pub/Sub 모델 지원으로 특정 채널을 구독한 구독자들에게 메시지를 전달할 수 있다.
- 전달된 메시지는 보관되지 않는다. - 100개가 넘는 오픈소스 클라이언트를 사용할 수 있으며, 다수의 언어가 지원된다.
- Java, Python, PHP, C, C++, C#, Javascript, Node.js, Ruby, R, Go 등등 - 더 자세한 내용은 아래 release note를 참고하면 좋을 것 같다.
Redis Release Note
Redis 주요 데이터 타입
제한적인 데이터 구조를 제공하는 단순한 Key-Value 저장소와 달리, 애플리케이션의 요구 사항을 충족할 수 있도록 다양한 데이터 구조를 지원한다. Key-Value 형태로 데이터가 저장되며, String은 Key-Value가 1:1 관계이고, 나머지는 1:N 관계다.
데이터 타입에 관한 더 상세한 내용은 다음 포스팅에서 다룰 예정이다.
Key | Value | |
Printable ASCII | Primitives | Containers (of Strings) |
String | List, Set, Sorted Set, Hash |
반응형