Skip to content

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를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있다.