Redis

이정원·2024년 10월 26일
post-thumbnail

용어 설명

in-memory database

In-memory(컴퓨터 메인 메모리) + database(데이터를 저장할 수 있는 시스템). 즉, 메모리에 데이터를 적재하여 고속으로 활용할 수 있는 데이터베이스 시스템이다. 메모리에 직접 데이터를 저장함으로써 디스크 접근 없이 매우 빠른 속도로 데이터를 처리할 수 있는 장점이 있다.

Redis

Redis는 Remote Dictionary Server의 약자로, 인메모리 기반의 키-값(key-value) 데이터 저장소를 지원하는 오픈소스 데이터베이스이다. Redis는 데이터를 해시테이블과 같은 구조로 관리하며 이를 통해 빠르고 효율적으로 key-value 데이터를 저장하고 다룰 수 있다. 자바에서의 Hashtable과 유사한 구조로 Redis는 다양한 데이터 타입을 지원하여 데이터를 유연하게 처리할 수 있다.

Redis의 특징

Redis는 대표적인 인메모리 데이터베이스로, 고성능과 유연한 데이터 관리 기능을 제공하여 다양한 용도로 사용된다. 다음은 Redis의 주요 특징들이다.

1.Persistent on Disk

Redis는 메모리에 저장된 데이터를 디스크에 지속적으로 저장하여 가용성을 확보할 수 있다. 이를 위해 RDB와 AOF 방식을 지원한다.

  • RDB (Redis DataBase): 특정 시점에 전체 데이터베이스를 디스크에 저장하는 방식이다. 주로 스냅샷(snapshot)을 사용하여 데이터베이스의 상태를 백업하며 1시간 단위나 1일 단위로 백업 전략을 설정할 수 있다. 스냅샷은 fork 방식을 통해 생성되기 때문에 백업 중 메모리 사용량이 급증할 수 있으며, 이를 모니터링해야 한다.
  • AOF (Append Only File): 모든 데이터 쓰기 작업을 명령어 단위로 로그에 기록하는 방식이다. 일종의 명령어 히스토리를 저장하는 방식으로 RDB에 비해 데이터 복구가 용이한 장점이 있다. 하지만, AOF 방식은 데이터를 더 많이 기록해야 하기 때문에 디스크 용량을 더 많이 사용하고 I/O 부하가 증가할 수 있다.

Redis는 RDB와 AOF 방식을 조합하여 사용 가능하며, 이를 통해 데이터의 영속성과 안정성을 보장할 수 있다.

2.Single Thread

Redis는 클라이언트로부터 전달받은 명령어를 단일 스레드로 처리한다. 외부에서 동시에 여러 명령어를 전달받을 수 있지만 실제 처리는 순차적으로 하나씩 진행된다. 이 방식 덕분에 내부적으로 락(lock)을 사용하지 않아도 원자적 실행이 가능하며 동시성 제어도 자연스럽게 이루어진다. 이는 각 명령어가 하나씩 순차적으로 처리되기 때문이다.

비록 단일 스레드 기반이지만, Redis는 초당 10만 건 이상의 트래픽을 처리할 수 있을 만큼 고성능을 자랑한다. 다만, 앞선 요청이 지연되면 전체 시스템에 영향을 미칠 수 있기 때문에 명령어의 시간 복잡도를 신중하게 고려하여 운영해야 한다. Redis는 빠른 응답성을 유지하기 위해 복잡한 명령어 사용을 피하고 간단한 연산을 수행하는 것이 권장된다.

3.Millisecond response

메모리를 데이터베이스로 사용한다는 것은 디스크에 비해 훨씬 빠른 응답 속도를 보장한다는 의미이다. Redis는 밀리초 단위의 빠른 응답 속도를 제공하여, 대량의 트래픽을 처리해야 하는 시스템에서 유용하다. 이로 인해 Redis는 빠른 응답 속도로 인해 높은 처리량을 제공할 수 있으며, 실시간 처리가 중요한 시스템에서 널리 활용된다.

4.Volatility of RAM

Redis는 데이터를 메모리에 저장하기 때문에 휘발성의 특성을 갖는다. 메모리는 전원이 꺼지면 데이터가 사라지기 때문에, 의도치 않은 시스템 종료나 재시작, 커널 문제로 인해 메모리에 저장된 데이터가 유실될 수 있다. 이러한 특성 때문에 데이터 영속성이 중요한 경우에는 정기적인 백업이나 디스크에 데이터를 저장하는 방식이 필요하다. Redis는 이를 위해 AOF(Append Only File)RDB(Snapshot) 방식의 백업 기능을 지원한다.

5.Data types

Redis는 단순한 키-값 저장소 이상의 기능을 제공한다. 다양한 자료구조를 지원하여 데이터를 보다 유연하게 관리할 수 있다.

  • String:단순한 문자열 값을 저장한다. 숫자형 데이터를 지원하여 간단한 산술 연산도 가능하다.
  • List: 순서가 있는 값들의 리스트를 저장합니다. 대기열이나 피드 구현에 적합하다.
  • Hash: 필드-값 쌍으로 이루어진 자료형으로, 사용자 프로필이나 객체 데이터를 저장할 때 유용하다.
  • Sorted Set: 값과 함께 우선순위(점수)를 가지는 정렬된 집합이다. 순위나 리더보드 등의 기능을 구현할 때 사용된다.

추가 기능

Redis는 다양한 활용 사례에 맞게 고급 기능을 제공한다.

  • Cache: 자주 사용하는 데이터를 빠르게 액세스할 수 있도록 임시 저장소로 사용, 반복되는 데이터베이스 질의를 줄임으로써 리소스 부담을 줄일수 있고 낮은 응답속도를 제공한다.

  • Session Store: 클라이언트의 세션을 분산 저장소로서 사용하며 Redis TTL(특정 시간 이후의 자동으로 데이터 삭제)기능으로 오래된 세션을 삭제하는데 유용하다.

  • Pub/Sub: 메시지 브로커로써 클라이언트가 메세지를 주고 받을수 있는 기능을 제공한다. 웹 어플리케이션에서 비동기 처리 목적으로 활용할수 있고 실시간 채팅과 같이 메세지 중계를 위한 기능으로써 활용된다.

  • Leader board: 게임이나 애플리케이션에서 사용자 순위를 저장하고 정렬하는 데 활용

  • Geospatial: 위치 기반 데이터를 저장하고, 반경 검색 등 지리적 쿼리를 지원

0개의 댓글