1. Introduction to Redis
1. Redis
1) Redis란
- Redis는 오픈 소스 In-Memory 키-값 데이터 구조 스토어이다.
- Redis는 REmote Dictionary Server의 약어이다.
- Redis는 다양한 In-Memory 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다.
- 주요 사용 사례로는 캐싱, 세션 관리, PUB/SUB 및 순위표를 들 수 있다.
- 현재 가장 인기 있는 키-값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원한다.
- Redis는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게인, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있다.
2) Redis의 특징
- Redis의 특징은 다음과 같다.
1] 놀라울 정도로 빠른 성능
- 데이터를 디스크 또는 SSD에 저장하는 대부분의 데이터베이스 관리 시스템과는 달리 모든 Redis 데이터는 서버의 주 메모리에 상주한다.
- Redis와 같은 In-Memory 데이터베이스는 디스크에 액세스해야 할 필요를 없앰으로써 검색 시간으로 인한 지연을 방지하고 CPU 명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스할 수 있다.
- 일반적으로 실행하는데 1밀초 미만이 소요된다.
2] In-Memory 데이터 구조
- Redis를 사용하면 사용자가 다양한 데이터 유형에 매핑되는 키를 저장할 수 있다.
- 기본적인 데이터 유형은 String으로서, 텍스트 또는 바이너리 데이터가 이에 해당하며 최대 크기는 512MB이다.
- 또한, Redis는 문자열이 추가된 순서대로 유지되는 Lists of Strings, Sets of unordered Strings, 점수에 따라 정렬되는 Sorted Sets, 필드와 값 목록을 저장하는 Hashes, 데이터 세트에서 고유한 항목을 세는 HyperLogLogs를 지원한다.
- 거의 모든 유형의 데이터가 Redis를 사용하여 In-Memory에 저장될 수 있다.
3] 다양성과 사용 편의성
- Redis는 개발과 운영을 좀 더 쉽고 좀 더 빠르게 수행할 수 있는 여러 가지 도구를 제공한다.
- PUB/SUB는 메시지를 채널에 게시하며, 채널에서 구독자에게 전달된다.
- 채팅과 메시징 시스템에 매우 적합하다.
- TTL 키는 해당 기간 후에는 스스로 삭제하는 지정된 Time To Live 값을 가질 수 있다.
- 데이터베이스를 불필요한 데이터로 채우지 않도록 하는 데 유용하다.
- 원자성 카운터는 경합 상태가 일관성 없는 결과를 생성하지 않도록 한다.
4] 복제 및 지속성
- Redis는 마스터-슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있다.
- 이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공할 수 있다.
- Redis는 안정성을 제공하기 위해 특정 시점 스냅샷(Redis 데이터 세트를 디스크로 복사)과 데이터가 변경될 때마다 이를 디스크에 저장하는 Append Only File(AOF) 생성을 모두 지원한다.
- 두 방법 모두 장애 발생 시 Redis 데이터를 신속하게 복원할 수 있다.
5] 선호하는 개발 언어 지원
- Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원된다.
3) Redis의 사용 사례
- Redis의 사용 사례는 다음과 같다.
1] 캐싱
- 다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 In-Memory 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여준다.
2] 세션 관리
- Redis는 세션 관리 작업에 매우 적합하다.
- Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키-값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있다.
- 세션 관리는 주로 게임, 전자 상거래 웹 사잍, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요하다.
3] 실시간 순위표
- Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬된다.
- 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있다.
4] 속도 제한
- Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있다.
- 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있다.
- 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용된다.
5] 대기열
- Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있다.
- Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합하다.
6] 채팅 및 메시징
- Redis에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원한다.
- 따라서 Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있다.
- 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있다.