In-memory(컴퓨터 메인 메모리) + database(데이터를 저장할 수 있는 시스템). 즉, 메모리에 데이터를 적재하여 고속으로 활용할 수 있는 데이터베이스 시스템이다. 메모리에 직접 데이터를 저장함으로써 디스크 접근 없이 매우 빠른 속도로 데이터를 처리할 수 있는 장점이 있다.
Redis는 Remote Dictionary Server의 약자로, 인메모리 기반의 키-값(key-value) 데이터 저장소를 지원하는 오픈소스 데이터베이스이다. Redis는 데이터를 해시테이블과 같은 구조로 관리하며 이를 통해 빠르고 효율적으로 key-value 데이터를 저장하고 다룰 수 있다. 자바에서의 Hashtable과 유사한 구조로 Redis는 다양한 데이터 타입을 지원하여 데이터를 유연하게 처리할 수 있다.
Redis는 대표적인 인메모리 데이터베이스로, 고성능과 유연한 데이터 관리 기능을 제공하여 다양한 용도로 사용된다. 다음은 Redis의 주요 특징들이다.
Redis는 메모리에 저장된 데이터를 디스크에 지속적으로 저장하여 가용성을 확보할 수 있다. 이를 위해 RDB와 AOF 방식을 지원한다.
Redis는 RDB와 AOF 방식을 조합하여 사용 가능하며, 이를 통해 데이터의 영속성과 안정성을 보장할 수 있다.
Redis는 클라이언트로부터 전달받은 명령어를 단일 스레드로 처리한다. 외부에서 동시에 여러 명령어를 전달받을 수 있지만 실제 처리는 순차적으로 하나씩 진행된다. 이 방식 덕분에 내부적으로 락(lock)을 사용하지 않아도 원자적 실행이 가능하며 동시성 제어도 자연스럽게 이루어진다. 이는 각 명령어가 하나씩 순차적으로 처리되기 때문이다.
비록 단일 스레드 기반이지만, Redis는 초당 10만 건 이상의 트래픽을 처리할 수 있을 만큼 고성능을 자랑한다. 다만, 앞선 요청이 지연되면 전체 시스템에 영향을 미칠 수 있기 때문에 명령어의 시간 복잡도를 신중하게 고려하여 운영해야 한다. Redis는 빠른 응답성을 유지하기 위해 복잡한 명령어 사용을 피하고 간단한 연산을 수행하는 것이 권장된다.
메모리를 데이터베이스로 사용한다는 것은 디스크에 비해 훨씬 빠른 응답 속도를 보장한다는 의미이다. Redis는 밀리초 단위의 빠른 응답 속도를 제공하여, 대량의 트래픽을 처리해야 하는 시스템에서 유용하다. 이로 인해 Redis는 빠른 응답 속도로 인해 높은 처리량을 제공할 수 있으며, 실시간 처리가 중요한 시스템에서 널리 활용된다.
Redis는 데이터를 메모리에 저장하기 때문에 휘발성의 특성을 갖는다. 메모리는 전원이 꺼지면 데이터가 사라지기 때문에, 의도치 않은 시스템 종료나 재시작, 커널 문제로 인해 메모리에 저장된 데이터가 유실될 수 있다. 이러한 특성 때문에 데이터 영속성이 중요한 경우에는 정기적인 백업이나 디스크에 데이터를 저장하는 방식이 필요하다. Redis는 이를 위해 AOF(Append Only File)나 RDB(Snapshot) 방식의 백업 기능을 지원한다.
Redis는 단순한 키-값 저장소 이상의 기능을 제공한다. 다양한 자료구조를 지원하여 데이터를 보다 유연하게 관리할 수 있다.
Redis는 다양한 활용 사례에 맞게 고급 기능을 제공한다.
Cache: 자주 사용하는 데이터를 빠르게 액세스할 수 있도록 임시 저장소로 사용, 반복되는 데이터베이스 질의를 줄임으로써 리소스 부담을 줄일수 있고 낮은 응답속도를 제공한다.
Session Store: 클라이언트의 세션을 분산 저장소로서 사용하며 Redis TTL(특정 시간 이후의 자동으로 데이터 삭제)기능으로 오래된 세션을 삭제하는데 유용하다.
Pub/Sub: 메시지 브로커로써 클라이언트가 메세지를 주고 받을수 있는 기능을 제공한다. 웹 어플리케이션에서 비동기 처리 목적으로 활용할수 있고 실시간 채팅과 같이 메세지 중계를 위한 기능으로써 활용된다.
Leader board: 게임이나 애플리케이션에서 사용자 순위를 저장하고 정렬하는 데 활용
Geospatial: 위치 기반 데이터를 저장하고, 반경 검색 등 지리적 쿼리를 지원