aws redis documentation: https://aws.amazon.com/elasticache/redis/
Redis는 빠른 오픈소스 인 메모리 키 값(key-value) 데이터 구조 저장소이다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있다.
Redis는 현재 가장 인기 있는 키-값 저장소로서, C 코드로 작성되었으며, 다양한 개발언어를 지원한다. Redis는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있다.
놀라울 정도로 빠른 성능
인 메모리 데이터 구조
Redis를 사용하면 사용자가 다양한 데이터 유형에 매핑되는 키를 저장할 수 있다. 기본적인 데이터 유형은 String 으로서, 텍스트 또는 이진 데이터가 이에 해당하며 최대 크기는 512MB이다.
Redis는 문자열이 추가된 순서되로 유지되는 Lists of Strings,
점수에 따라 정렬되는 Sorted Sets
필드와 값 목록을 저장하는 Hashes
데이터 세트에서 고유한 항목을 세는 HyperLogLogs를 지원한다.
거의 모든 유형의 데이터가 Redis를 사용하여 인 메모리에 저장될 수 있다.
다양성과 사용 편의성
Redis는 개발과 운영을 좀 더 쉽고 좀 더 빠르게 수행할 수 있는 여러가지 도구를 제공한다.
Pub/Sub는 메시지를 채널에 게시하며, 채널에서 구독자에게 전달된다. 채팅과 메시징 시스템에 매우 적합하다.
TTL 키는 해당 기간 후에는 스스로를 삭제하는 지정된 Time To Live 값을 가질 수 있다. 데이터베이스를 불필요한 데이터로 채우지 않도록 하는 데 유용하다. (로그인 세션관리에 주로 사용됨!)
원자성 카운터는 경합 상태가 일관성 없는 결과를 생성하지 않도록 한다.
Lua는 강력하지만 간단한 스크립팅 언어이다.
복제 및 지속성
Redis는 마스터-슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있다. 이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공할 수 있다.
Redis는 안정성을 제공하기 위해 특정 시점 스냅샷(Redis 데이터 세트를 디스크로 복사)과 데이터가 변경될 때마다 이를 디스크에 저장하는 Append Only File(AOF) 생성을 모두 지원한다. 두 방법 모두 장애 발생 시 Redis 데이터를 신속하게 복원할 수 있다.
캐싱
세션 관리
Redis는 세션 관리 작업에 매우 적합하다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 저장소로 사용하면 간단하게 세션 정보를 관리할 수 있다.
세션 관리는 주로 게임, 웹 사이트, 소셜 미디어 플렛폼을 비롯한 온라인 애플리케이션에 필요하다.
실시간 순위표
속도 제한
Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 엑세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있다. (예, X(전 twitter)의 rate limit을 이용한 API 요청 제제와 비슷한 원리)
속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용된다.
대기열
채팅 및 메시징
RAM은 인 메모리 구조이기 때문에 공간이 한정되어있다. RAM은 공간이 한정되어있기 때문에, 대용량의 데이터를 저장할 수 없다. 또한 대용량의 데이터가 한 번에 들어올 경우 메모리 스왑이 일어나며, 기존 성능보다 느려지는 현상을 보이기도 한다.
따라서 Redis는 메인 DB로 쓰기보다는 로그인 세션 관리나 꼭 필요한 경우에만 사용하는 것이 적절하다.