[Redis] Redis 란 ?

nooyji·2022년 7월 5일
0

Redis 는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다.
Redis 는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다. Redis 는 현재 가장 인기 있는 키 값 스토어로서, BSD 라이선스가 있고, 최적화된 C 코드로 작성되었으며, 다양한 개발 언어를 지원합니다. Redis 는 REmote DIctionary Server 의 약어입니다.

Redis 는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있습니다. AWS 는 Redis 용 Amazon ElastiCache 라는 최적화된 완전관리형 데이터 베이스 서비스를 통해 Redis 를 지원하며, 고객은 원하는 경우 AWS EC2 에서 자체 관리형 Redis 를 실행할 수도 있습니다.

데이터를 디스크 또는 SSD 에 저장하는 대부분의 데이터베이스 관리 시스템과는 달리 모든 Redis 데이터는 서버의 주 메모리에 상주합니다. Redis 와 같은 인 메모리 데이터베이스는 디스크에 액세스해야 할 필요를 없앰으로써 검색 시간으로 인한 지연을 방지하고 CPU 명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스할 수 있습니다.

Redis 를 사용하면 사용자가 다양한 데이터 유형에 매핑되는 키를 저장할 수 있습니다. 기본적인 데이터 유형은 String 으로써, 텍스트 또는 이진 데이터가 이에 해당하며 최대 크기는 512MB 입니다. 또한, Redis 는 문자열이 추가된 순서대로 유지되는 Lists of Strings, Sets of unordered Strings, 점수에 따라 정렬되는 Sorted Sets, 필드와 값 목록을 저장하는 Hashes, 데이터 세트에서 고유한 항목을 세는 HyperLogLogs 를 지원합니다. 거의 모든 유형의 데이터가 Redis 를 사용하여 인 메모리에 저장될 수 있습니다.

Redis 는 개발과 운영을 좀 더 쉽고 좀 더 빠르게 수행할 수 있는 여러 가지 도구를 제공합니다. Pub/Sub 는 메시지를 채널에 게시하며, 채널에서 구독자에게 전달됩니다. 채팅과 메시징 시스템에 매우 적합합니다. TTL 키는 해당 기간 후에는 스스로를 삭제하는 지정된 Time To Live 값을 가질 수 있습니다. 데이터베이스를 불필요한 데이터로 채우지 않도록 하는데 유용합니다. 원자성 카운터는 경합 상태가 일관성 없는 결과를 생성하지 않도록 합니다. Lua 는 강력하지만 간단한 스크립팅 언어입니다.

Redis 는 마스터 - 슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있습니다. 이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공할 수 있습니다.

Redis 는 안정성을 제공하기 위해 특정 시점 스냅샷 (Redis 데이터 세트를 디스크로 복사) 과 데이터가 변경될 때마다 이를 디스크에 저장하는 Append Only File (AOF) 생성을 모두 지원합니다. 두 방법 모두 장애 발생 시 Redis 데이터를 신속하게 복원할 수 있습니다.

캐싱

다른 데이터베이스 "앞" 에 배치된 Redis 는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.

세션 관리

Redis 는 세션 관리 작업에 매우 적합합니다. Redis 를 세션 키에 대한 적절한 TTL 과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.

실시간 순위표

Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.

속도 제한

Redis 는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있습니다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.

대기열

Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. Redis List 는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.

채팅 및 메시징

Redis 에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 Redis 를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB 를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.

Redis 는 Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비 관계형 데이터베이스 관리 시스템 (DBMS) 이다. 모든 데이터를 메모리에 로드해 처리하는 메모리 기반 DBMS 이다.

Cassandra, HBase 와 같이 NoSQL 로 분류되기도 하고, memcached 와 같이 In Memory 솔루션으로 분류되기도 한다. 성능이 memcached 에 버금가면서 다양한 데이터 구조 (String, List, Set, Sorted Set, Hashes) 를 지원한다는 장점이 있다.
Message Queue, Shared Memory, Remote Dictionary 용도로 사용될 수 있다. 다양한 회사 서비스 (라인, 네이버, 삼성전자, Stackoverflow, instagram 등) 에서 널리 사용되고 있어 나름의 안정성 및 성능이 검증된 솔루션으로 인정받고 있다.

장점

다양한 데이터 구조를 지원한다. (String, List, Set, Sorted Set, Hashes)

메모리 + 디스크 활용을 통한 영속적인 데이터 보존 가능

서버 측 복제 및 샤딩 지원

다양한 API 를 지원

단점

메모리 사용량이 많다
기본적으로 memcached 대비 데이터 용량을 지원하기 때문이기도 하지만, 동작 방식에서 오는 메모리 사용량이 많다.

대규모 프래픽에 대한 응답속도 불안정
대규모 트래픽 발생에 따라 많은 양의 데이터가 Update 되면 메모리 할당 방식 차이에 따른 메모리 파편화 및 응답속도 저하가 발생된다 (memcached 대비), 다만 응답속도 저하는 극단적인 환경에서 발생한다고 하며 대규모 서비스에서도 Redis 를 많이 도입하는 것을 보면 일반적인 상황에서는 문제가 없을 것으로 판단된다.

원문 : https://aws.amazon.com/ko/elasticache/what-is-redis/
https://devlog-wjdrbs96.tistory.com/374
https://www.psjco.com/26

0개의 댓글