검수요청.png검수요청.png

"레디스"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(장점)
(장점)
27번째 줄: 27번째 줄:
 
* '''채팅 및 메시징''' : 레디스에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 레디스를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.
 
* '''채팅 및 메시징''' : 레디스에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 레디스를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.
 
==장점==
 
==장점==
*데이터 대부분을 디스크 또는 SSD에 저장하는 다른 데이터베이스와는 달리 모든 레디스 데이터는 서버의 주 메모리에 상주한다. 작업을 위해 대부분 디스크까지 왕복해야 하는 전통적인 디스크 기반 데이터베이스와 대조적으로, 레디스와 같은 인 메모리 데이터 스토어는 이와 같은 단점이 없다. 따라서 더 많은 작업을 처리하고 더 빠른 응답 시간을 지원할 수 있다. 그래서 평균 읽기 또는 쓰기 작업 속도 1밀리초 미만이라는 빠른 성능으로 초당 수백만 건의 작업을 할 수 있다.<ref=name "레디스 장점" >AWS https://aws.amazon.com/ko/redis/</ref>
+
*데이터 대부분을 디스크 또는 SSD에 저장하는 다른 데이터베이스와는 달리 모든 레디스 데이터는 서버의 주 메모리에 상주한다. 작업을 위해 대부분 디스크까지 왕복해야 하는 전통적인 디스크 기반 데이터베이스와 대조적으로, 레디스와 같은 인 메모리 데이터 스토어는 이와 같은 단점이 없다. 따라서 더 많은 작업을 처리하고 더 빠른 응답 시간을 지원할 수 있다. 그래서 평균 읽기 또는 쓰기 작업 속도 1밀리초 미만이라는 빠른 성능으로 초당 수백만 건의 작업을 할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
*레디스에서는 더 짧은 코드 작성으로도 [[애플리케이션]](Application)의 데이터를 저장, 액세스 및 사용할 수 있으므로 코드가 간소화된다. 예를 들어 애플리케이션의 데이터가 해시맵에 저장되어 있는데 이를 데이터 스토어에 저장하려는 경우, 레디스 해시 데이터 구조를 사용하면 간단하게 데이터를 저장할 수 있다. 해시 데이터 구조가 없는 데이터 스토어에서 유사한 작업을 수행하려면 형식을 변환하기 위해 더 긴 코드가 필요하다.<ref=name "레디스 장점" >AWS https://aws.amazon.com/ko/redis/</ref>
+
*레디스에서는 더 짧은 코드 작성으로도 [[애플리케이션]](Application)의 데이터를 저장, 액세스 및 사용할 수 있으므로 코드가 간소화된다. 예를 들어 애플리케이션의 데이터가 해시맵에 저장되어 있는데 이를 데이터 스토어에 저장하려는 경우, 레디스 해시 데이터 구조를 사용하면 간단하게 데이터를 저장할 수 있다. 해시 데이터 구조가 없는 데이터 스토어에서 유사한 작업을 수행하려면 형식을 변환하기 위해 더 긴 코드가 필요하다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
*레디스는 기본-복제 [[아키텍처]](architecture)를 사용하며 비동기식 복제를 지원하므로 데이터가 여러 복제 서버에 복제될 수 있다. 따라서 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 더 빠른 복구 기능을 사용할 수 있다.<ref=name "레디스 장점" >AWS https://aws.amazon.com/ko/redis/</ref>
+
*레디스는 기본-복제 [[아키텍처]](architecture)를 사용하며 비동기식 복제를 지원하므로 데이터가 여러 복제 서버에 복제될 수 있다. 따라서 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 더 빠른 복구 기능을 사용할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
*레디스는 단일 노드 또는 [[클러스터링]](clustering)된 토폴로지(topology)에서 기본-복제 아키텍처를 제공한다. 따라서 가용성이 뛰어난 솔루션을 구축하여 일관된 성능과 안정성을 사용할 수 있다. 클러스터 크기를 조정해야 하는 경우, 스케일업(scale-up), 스케일인(scale-in) 또는 스케일아웃(scale-out)할 수 있는 다양한 옵션이 있다. 따라서 수요에 맞춰 클러스터를 확장할 수 있다.<ref=name "레디스 장점" >AWS https://aws.amazon.com/ko/redis/</ref>
+
*레디스는 단일 노드 또는 [[클러스터링]](clustering)된 토폴로지(topology)에서 기본-복제 아키텍처를 제공한다. 따라서 가용성이 뛰어난 솔루션을 구축하여 일관된 성능과 안정성을 사용할 수 있다. 클러스터 크기를 조정해야 하는 경우, 스케일업(scale-up), 스케일인(scale-in) 또는 스케일아웃(scale-out)할 수 있는 다양한 옵션이 있다. 따라서 수요에 맞춰 클러스터를 확장할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
 
*리스트, 배열과 같은 데이터를 처리하는데 유용하다. [[밸류]](value) 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원한다. 따라서 다양한 방식으로 데이터를 활용할 수 있다. 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
 
*리스트, 배열과 같은 데이터를 처리하는데 유용하다. [[밸류]](value) 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원한다. 따라서 다양한 방식으로 데이터를 활용할 수 있다. 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
 
*여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, [[오토믹]](Atomic) 처리로 데이터 부정합 방지 오토믹처리 함수를 제공한다.
 
*여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, [[오토믹]](Atomic) 처리로 데이터 부정합 방지 오토믹처리 함수를 제공한다.

2020년 7월 30일 (목) 16:53 판

레디스(Redis) 로고
레디스(Redis) 로고와 글자

레디스(Redis)는 Remote Dictionary Server의 약자로서 '키-값'(key-value) 구조의 비관계형 데이터를 저장하고 관리하기 위한 노에스큐엘(NoSQL)의 일종이다. 2009년 살바토르 산필리포(Salvatore Sanfilippo)가 처음 개발했다. 2015년부터 레디스랩스(Redis Labs)가 지원하고 있다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 데이터베이스 관리 시스템(DBMS)이다. BSD 라이선스를 따른다.

개요

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

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

역사

레디스 프로젝트는 레디스의 최초 개발자인 antirez라는 별명을 가진 살바토르 산필리포(Salvatore Sanfilippo)가 이탈리아 웹사이트의 확장성을 향상시키고 실시간 웹 로그 분석기를 개발하려고 할 때 시작되었다. 기존 데이터베이스 시스템을 사용하여 일부 유형의 작업 부하를 조정하는 데 심각한 문제가 발생한 후 Sanfilippo는 Tcl에서 레디스의 개념증명 버전을 프로토타입화하기 시작했다. 나중에 Sanfilippo는 프로토 타입을 C 언어로 번역하고 첫 번째 데이터 유형 인 목록을 구현했다. 내부적으로 성공을 거둔 프로젝트를 몇 주 동안 사용한 후 Sanfilippo는 소스를 공개하고 Hacker News 에서 프로젝트를 발표하기로 결정했다. 프로젝트는 깃허브(GitHub)와 인스타그램(Instagram)을 채택한 최초의 회사 중 하나인 루비(Ruby) 커뮤니티에서 더욱 주목 받기 시작했다.

  • Sanfilippo는 2010년 03월 브이엠웨어(VMware)에 고용되었다.
  • 2013년 05월 레디스는 Pivotal Software (VMware 분사)의 후원을 받았다.
  • 2015년 06월에 레디스 Las가 후원했다.
  • 2018년 10월에 레디스 5.0이 출시되었다. Redis Stream은 단일 키에서 자동 시간 기준 시퀀스를 사용하여 여러 필드와 문자열 값을 저장할 수있는 새로운 데이터 구조이다.

특징

레디스는 오픈 소스 소프트웨어이며 디스크가 아닌 메모리 기반의 데이터 저장소이다. NoSQL & Cache 솔루션 이며 메모리 기반으로 구성된다. 명시적으로 삭제를 설정하지 않으면 데이터는 삭제되지 않는 영구적 보존이다. 여러대의 서버 구성이 가능하며 데이터베이스로 사용될 수 있고 캐시로도 사용될 수 있는 기술이다. 성능은 서버에 따라 다르나 초당 2만 ~ 10만회정도 수행한다. 메모리 위에서 동작하는 레디스는 NoSQL DBMS로 분류되며 동시에 Memcached와 같은 인메모리(In-memory)솔루션으로 분리된다. NoSQL 중에서도 레디스가 주목을 받는 이유는 데이터 저장소로 입력/출력이 가장 빠른 메모리를 채택하고 단순한 구조의 데이터 모델을 사용하여 속도가 빠르다. 그리고 캐시 및 데이터 스토어에 유리하고 다양한 API를 지원한다. 레디스는 대형 서비스 업체들이 사용자들의 대규모 메세지를 실시간으로 처리하기 위해서 사용하고 있다.[2]

활용

  • 캐싱 : 다른 데이터베이스 "앞"에 배치된 레디스는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.
  • 세션 관리 : 레디스는 세션 관리 작업에 매우 적합합니다. 레디스를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.
  • 실시간 순위표 : Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.
  • 속도 제한 : 레디스는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있습니다. 클라이언트의 API 키에 연결된 레디스 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.
  • 대기열 : 레디스 List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. 레디스 List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.
  • 채팅 및 메시징 : 레디스에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 레디스를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.

장점

  • 데이터 대부분을 디스크 또는 SSD에 저장하는 다른 데이터베이스와는 달리 모든 레디스 데이터는 서버의 주 메모리에 상주한다. 작업을 위해 대부분 디스크까지 왕복해야 하는 전통적인 디스크 기반 데이터베이스와 대조적으로, 레디스와 같은 인 메모리 데이터 스토어는 이와 같은 단점이 없다. 따라서 더 많은 작업을 처리하고 더 빠른 응답 시간을 지원할 수 있다. 그래서 평균 읽기 또는 쓰기 작업 속도 1밀리초 미만이라는 빠른 성능으로 초당 수백만 건의 작업을 할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
  • 레디스에서는 더 짧은 코드 작성으로도 애플리케이션(Application)의 데이터를 저장, 액세스 및 사용할 수 있으므로 코드가 간소화된다. 예를 들어 애플리케이션의 데이터가 해시맵에 저장되어 있는데 이를 데이터 스토어에 저장하려는 경우, 레디스 해시 데이터 구조를 사용하면 간단하게 데이터를 저장할 수 있다. 해시 데이터 구조가 없는 데이터 스토어에서 유사한 작업을 수행하려면 형식을 변환하기 위해 더 긴 코드가 필요하다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
  • 레디스는 기본-복제 아키텍처(architecture)를 사용하며 비동기식 복제를 지원하므로 데이터가 여러 복제 서버에 복제될 수 있다. 따라서 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 더 빠른 복구 기능을 사용할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
  • 레디스는 단일 노드 또는 클러스터링(clustering)된 토폴로지(topology)에서 기본-복제 아키텍처를 제공한다. 따라서 가용성이 뛰어난 솔루션을 구축하여 일관된 성능과 안정성을 사용할 수 있다. 클러스터 크기를 조정해야 하는 경우, 스케일업(scale-up), 스케일인(scale-in) 또는 스케일아웃(scale-out)할 수 있는 다양한 옵션이 있다. 따라서 수요에 맞춰 클러스터를 확장할 수 있다.<ref=name "레디스 장점">AWS https://aws.amazon.com/ko/redis</ref>
  • 리스트, 배열과 같은 데이터를 처리하는데 유용하다. 밸류(value) 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원한다. 따라서 다양한 방식으로 데이터를 활용할 수 있다. 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
  • 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, 오토믹(Atomic) 처리로 데이터 부정합 방지 오토믹처리 함수를 제공한다.
  • 메모리를 활용하면서 영속적인 데이터를 보존한다. 명령어로 명식적으로 삭제, 만료(expires)를 설정하지 않으면 데이터가 삭제되지 않는다. 스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb파일로 저장하여 해당 시점으로 복구할 수 있다.
  • 레디스 서버(Redis Server)는 1개의 싱글 쓰레드로 수행되며, 따라서 서버 하나에 여러개의 서버를 띄우는 것이 가능하다. Master - Slave 형식으로 구성이 가능하다. Master-Slave 방식으로 데이터 분실 위험을 없애준다.
  • 레디스에는 String, Lists, Sets, Sorted sets, Hashes 의 5가지 데이터형을 사용할 수 있다.[3]

레디스 데이터 타입 종류

레디스 데이터 타입(Redis Data Type)에는 Strings, Lists, Sets, Hashes, Sorted sets, Bitmaps등이 있다. Strings는 값에 문자, 숫자 등을 저장하고 저장시에 별도로 숫자, 문자 구분이 없다. 숫자도 저장이 가능하며 숫자에 incr(특정 수를 더할때), incrby(특정 수를 뺄때) 같은 연산이 가능하다. Lists는 값에 리스트(list)를 저장한다. Sets는 값을 셋(set)형태로 가지고 있는다. 리스트는 중복이 가능하지만 셋은 중복이 안된다. Hashes는 Hashs key/value 목록을 값으로 가진다. Sorted sets는 값을 셋 형태로 가지고 있는다. Sets과 마찬가지로 중복은 안되고 리스트처럼 사용이 될꺼 같으나 정렬된다는 장점이 있는 것 같다. Bitmaps는 비트(bit)값을 저장해준다. 512MB(메가바이트)의 용량으로 2^32(42억)개의 비트값들을 저장할 수 있다.[4]

단점

  • 메모리를 2배로 사용한다.
  • 레디스는 싱글 쓰레드이기 때문에 스냅샷을 뜰 때 자식 프로세스를 하나 만들어낸 후 새로 변경된 메모리 페이지를 복사해서 사용한다.
  • copy-on-write 방식을 사용한다. 보통 레디스를 사용할 때는 데이터 변경이 자주 있기 때문에 실제 메모리 크기만큼 자식 프로세스가 복사하게 된다. 그로인해 실제로 필요한 메모리 양보다 더 많은 메모리를 사용하게 된다.
  • 대규모 트래픽으로 인해 많은 데이터가 업데이트되면 레디스는 Memcached에 비해서 속도가 불안정하다. 이것은 레디스와 Memcached의 메모리 할당 구조가 다르기 때문에 발생하는 현상이다.
  • jemalloc을 사용하기 때문에 매번 malloc과 free를 통해서 메모리 할당이 이루어진다. 반면 Memcached는 slab 할당자를 이용하여 내부적으로는 메모리 재할당을 하지 않고 관리하는 형태를 취한다. 이로 인해 레디스는 메모리 파편화가 발생하여 이 할당 비용 때문에 응답 속도가 느려진다. 다만 이는 극단적으로 봤을 때 발생하는 일이다. 대규모 서비스에서도 레디스를 많이 도입하는 것을 보면 일반적으로 스타트업 등에서 사용하여도 무방하다 볼 수 있다.[2]

평가 및 전망

각주

  1. Redis란 무엇입니까? AWS - https://aws.amazon.com/ko/elasticache/what-is-redis/
  2. 2.0 2.1 , Redis 개념과 특징 깃허브 - https://goodgid.github.io/Redis/
  3. 레디스 개념 및 특징 〉, 《티스토리》, 2016-06-10
  4. 깃허브 - https://kimpaper.github.io/2016/07/27/redis-datatype/

같이 보기


  검수요청.png검수요청.png 이 레디스 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.