Redis 개요
1.1 Redis란? (인메모리 데이터 저장소 개념)
Redis는 데이터 구조 서버로, 주로 인메모리 데이터베이스로 사용됩니다. 데이터가 메모리에 저장되어 빠른 읽기/쓰기가 가능하며, 다양한 데이터 구조를 지원합니다. Redis는 데이터를 디스크에 저장할 수도 있지만, 기본적으로 인메모리 방식이므로 성능이 매우 빠릅니다. 데이터베이스, 캐시, 메시지 브로커 등 다양한 용도로 활용됩니다.
Redis의 주요 특징
- 빠른 읽기/쓰기 속도: 메모리에 데이터를 저장하므로 I/O 지연이 적어 빠른 응답을 제공합니다.
- 다양한 데이터 구조 지원: 문자열, 리스트, 집합, 해시, 정렬된 집합 등 다양한 자료형을 지원합니다.
- 고가용성: Redis는 복제와 클러스터링 기능을 제공하여 고가용성 및 분산 환경에서 안정적으로 동작할 수 있습니다.
1.2 Key-Value Store 개념 및 활용 사례
Redis는 Key-Value Store로 작동합니다. 즉, 데이터를 **키(Key)**와 **값(Value)**의 쌍으로 저장하고, 키를 사용하여 빠르게 값을 조회할 수 있습니다. 이는 다양한 애플리케이션에서 매우 유용하게 활용됩니다.
Key-Value Store의 특징
- 빠른 조회: 키를 통해 값을 빠르게 조회할 수 있어, 검색 속도가 매우 빠릅니다.
- 유연성: 값으로 다양한 데이터 구조를 사용할 수 있어 다양한 형태의 데이터를 다룰 수 있습니다.
Redis 활용 사례
- 캐싱: 데이터베이스 조회 결과를 캐시하여, 자주 조회되는 데이터를 빠르게 반환합니다.
- 세션 관리: 사용자 로그인 세션 정보를 Redis에 저장하여 빠르게 관리합니다.
- 순위 관리: 게임 점수나 추천 시스템 등에서 정렬된 데이터 구조를 활용하여 순위를 관리합니다.
1.3 Memcached와의 비교: 언제 Redis를 선택해야 하는가?
Memcached와 Redis의 차이점
- 데이터 구조: Memcached는 기본적으로 문자열만 저장하지만, Redis는 문자열 외에도 리스트, 해시, 집합 등 다양한 자료형을 지원합니다.
- 퍼시스턴스: Redis는 데이터를 디스크에 저장할 수 있는 기능(스냅샷, AOF 등)을 제공하는 반면, Memcached는 기본적으로 인메모리 데이터베이스로만 사용됩니다.
- 성능: 두 시스템 모두 빠른 성능을 제공하지만, Redis는 복잡한 데이터 구조와 더 높은 기능을 제공합니다.
Redis를 선택해야 하는 경우
- 복잡한 데이터 구조가 필요한 경우.
- 데이터의 영속성이 필요할 때.
- 고가용성과 분산 환경을 고려해야 할 때.
1.4 Redis 주요 특징 (퍼시스턴스, 스냅샷, 복제, 클러스터링 등)
퍼시스턴스(Persistence)
Redis는 기본적으로 인메모리 데이터베이스이지만, 데이터를 디스크에 저장하여 영속성을 유지할 수 있습니다. 두 가지 주요 방식이 있습니다:
- RDB (Redis Database): 일정 주기로 데이터베이스 스냅샷을 저장하여 복구할 수 있도록 합니다.
- AOF (Append-Only File): 모든 쓰기 명령을 로그에 기록하여 데이터 복구를 지원합니다.
복제(Replication)
Redis는 마스터-슬레이브 복제를 지원하여, 데이터를 여러 서버에 복제하여 고가용성 및 장애 조치를 제공합니다. 마스터 서버에서 변경된 데이터는 슬레이브 서버로 복제되어, 슬레이브 서버를 읽기 전용으로 사용할 수 있습니다.
클러스터링(Clustering)
Redis 클러스터링 기능은 데이터를 여러 서버에 분산하여 수평 확장을 지원합니다. 이를 통해 큰 규모의 데이터를 처리할 수 있습니다.
1.5 Redis 아키텍처 개요
Redis는 클라이언트-서버 구조로 동작합니다. 클라이언트는 Redis 서버에 연결하여 명령을 보내고, Redis 서버는 이를 처리한 후 응답을 반환합니다.
Redis 아키텍처의 주요 구성 요소
- 클라이언트: Redis 명령어를 전송하는 애플리케이션.
- 서버: Redis 데이터를 저장하고 명령을 처리하는 핵심 엔진.
- 데이터베이스: Redis는 기본적으로 16개의 데이터베이스를 지원하며, 각 데이터베이스는 독립적으로 동작합니다.
Redis는 단일 스레드로 동작하며, 모든 클라이언트 요청을 하나의 스레드에서 처리하여 성능을 최적화합니다.
마지막 수정일자