Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다. Redis는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis는 REmote DIctionary Server의 약어입니다.
Redis는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있습니다. AWS는 Redis용 Amazon ElastiCache라는 최적화된 완전관리형 데이터베이스 서비스를 통해 Redis를 지원하며, 고객은 원하는 경우 AWS EC2에서 자체 관리형 Redis를 실행할 수도 있습니다. - 출처 aws
https://aws.amazon.com/ko/elasticache/what-is-redis/
Redis란 무엇입니까? – Amazon Web Services(AWS)
Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원됩니다.
aws.amazon.com
간단히 말하자면 Redis는 오픈 소스 인메모리 데이터 구조 저장소로, 주로 데이터베이스, 캐시, 메세지 브로커로 사용되는데 크게 3가지의 개념으로 보면 됩니다.
- 인메모리 데이터베이스: Redis는 모든 데이터를 메모리에 저장하여 빠른 속도로 접근할 수 있도록 설계되었습니다. 디스크에 저장할 수 있는 옵션도 있지만 Redis는 기본적으로 메모리 기반입니다.
- 데이터 구조: Redis는 다양한 데이터 구조를 지원합니다. 기본적으로 문자열(String), 해시(Hash), 세트(Set), 정렬된 세트(Sorted Set)등을 제공합니다.
- 키-값 저장소: Redis는 키-값 싸으로 데이터를 저장합닏. 각 키는 고유하며, 해당키를 통해 빠르게 조회가 가능합니다.
Redis의 작동원리를 보자면 메모리 저장, 지속성, 복제와 클러스터링 이 3가지를 보면 됩니다.
메모리 저장: 모든 데이터는 메모리에 저장되며, 이르 통해 매우 빠른 읽기/쓰기가 가능합니다. 일반적으로 디스크 I/O보다 메모리 I/O가 훨씬 빠릅니다.
Persistence(지속성): Redis는 메모리에 저장된 데이터를 디스크에 백업하는 방법을 제공합니다. 두 가지 방식이 있는데 하나는 RDB 나머지는 AOF입니다.
RDB(Redis Database Backup): 주기적으로 메모리 상태를 스냅샷으로 저장합니다.
AOF(Append Only File): 모든 쓰기 작업을 로그 파일에 기록하여, 서버 재시작 시 해당 로그르 재생하여 데이터를 복원합니다.
복제와 클러스터링: Redis는 마스터-슬레이브 복제를 지원하며, 클러스터링을 통해 수평 확장이 가능합니다. 이를 통해 고가용성과 성능을 향상시킬 수 있습니다.
마스터-슬레이브 복제란?
마스터-슬레이브 복제는 하나의 마스터 Redis 서버와 여러 슬레이브 Redis 서버 간의 데이터 복제를 설정하는 방식입니다.
작동원리를 보면
- 마스터 서버에서 모든 쓰기 작업(데이터 추가, 수정, 삭제)이 수행됩니다.
- 슬레이브 서버는 마스터 서버의 데이터를 실시간으로 복제합니다. 슬레이브 서버는 읽기 전용이며, 마스터로부터 데이터를 복제하여 자신마의 데이터베이스를 유지합니다.
- Failover: 마스터 서버가 실패하면, 슬레이브 중 하나를 새로운 마스터로 승격하여 서비스를 지속할 수 있습니다. 이를 통해 고가용성 유지가 가능합니다.
-고가용성(High Availability, HA): 시스템이나 서비스가 지속적으로 운영될 수 있도록 보장하는 개념입니다. 고가용성 시스템은 장애가 발생해도 서비스가 중단되지 않고 가능한 한 빨리 복구될 수 있도록 설계되어 있습니다.
장점
- 부하 분산: 읽기 요청을 여러 슬레이브 서버에 분산하여 처리할 수 있습니다.
- 고가용성: 마스터 서버의 장애 시 슬레이브 서버로 자동 전환 가능.
클러스터링이란?
Redis 클러스터링은 데이터를 여러 Redis 인스턴스에 분산 저장하는 방법으로, 수평 확장을 지원합니다.
이것의 작동원리를 보면
- 샤딩에서 클러스터의 각 노드는 전체 데이터의 일부를 저장합니다. 데이터를 분산하여 저장하기 위해 키 해시를 사용합니다. 각 키는 슬롯으로 매핑되며, 이 슬롯은 클러스터의 특정 노드에 할당됩니다.
- 노드 간 통신을 통해 클러스터 내의 노드는 서로 통신하여 상태를 공유하고, 요청을 적절한 노드로 라우팅합니다.
- Failover: 특정 노드가 실패하면, 클러스터는 자동으로 데이터의 복제본을 다른 노드에서 활성화하여 고가용성을 유지합니다.
-노드(node): 컴퓨터 네트워크에서 데이터를 전송하거나 처리하는 데 참여하는 기본 단위를 의미합니다.
장점
수평 확장: 데이터 양이 많아지면 더 많은 노드를 추가하여 처리할 수 있습니다.
데이터 분산: 데이터가 여러 노드에 분산되어 저장되므로, 단일 노드의 부담을 줄일 수 있습니다.
높은 처리량: 클러스터는 여러 노드에서 동시에 요청을 처리할 수 있어 성능이 향상됩니다.
그래서 이 둘을 요약하자면
마스터-슬레이브 복제는 데이터의 복제를 통해 읽기 성능을 개선하고, 고가용성을 제공하는 반면, 클러스터링은 데이터를 여러 노드에 분산하여 수평 확장을 지원합니다.
그리고 Redis는 어디에 사용되는가?
캐시: Redis는 세션 관리, 페이지 캐싱, 데이터베이스 쿼리 결과 캐싱 등으로 널리 사용됩니다.
메시시 브로커: pub/sub 기능을 통해 메시지 큐 시스템으로 활용됩니다.
실시간 데이터 처리: 실시간 분석 및 통계 집계에 사용됩니다.
게임 개발: 실시간 게임에서 플레이어의 상태나 점수를 저장하는 데 사용됩니다.
분산 시스템: 여러 서버 간의 상태 정보를 공유하는 데 유용합니다.
장단점을 요약하자면
장점
• 매우 빠른 성능
• 다양한 데이터 구조 지원
• 유연한 Persistence 옵션
• 간단한 설치 및 사용
단점
• 메모리 기반이므로 큰 데이터 세트를 처리하는 데 비용이 많이 들 수 있음
• 디스크 I/O를 사용하는 경우 성능 저하 가능성