Redis 이녀석... 궁금하다

Redis 이녀석... 궁금하다

Redis란?

Redis(REmote DIctionary Server)는 주로 애플리케이션 캐시나 빠른 응답 속도를 가진 데이터베이스로 사용되는 오픈 소스 인메모리 NoSQL 키/값 저장소이다. Redis는 디스크나 솔리드 스테이트 드라이브(SSD)가 아닌 메모리에 데이터를 저장하기 때문에 탁월한 속도, 안정성, 성능이 제공된다.

애플리케이션에서 외부 데이터 소스를 사용하는 경우, 이러한 소스의 대기 시간과 처리량은 특히 트래픽이 증가하거나 애플리케이션이 확장될 때 성능 병목 현상을 일으킬 수 있다. 이 경우 성능을 향상시키는 한 가지 방법은 애플리케이션과 물리적으로 더 가까운 메모리에 데이터를 저장하고 조작하는 것인데, Redis는 이 작업을 위해 구축되었다. 즉, Redis는 모든 데이터를 메모리에 저장하여 데이터를 읽거나 쓸 때의 성능을 최대화하고, 데이터를 사용자에게 더 가깝게 배치하여 대기 시간을 최소화할 수 있는 내장형 복제 기능을 제공한다.


차별화

Redis는 애플리케이션 성능을 높이도록 설계된 보조 구성요소인 ‘기존’의 NoSQL 데이터 저장소와 차별화한다.

Redis 캐시 세션

MongoDB, PostreSQL과 같은 NoSQL 데이터베이스와 달리, Redis는 하드 디스크 및 솔리드 스테이트 드라이브(SSD)가 아닌 서버의 주 메모리에 데이터를 저장한다. 따라서 읽기 및 쓰기 작업을 수행할 때 응답 시간이 훨씬 빨라진다. 또한 서비스 및 애플리케이션 워크로드의 고가용성과 확장성을 보장하는 데 도움이 된다.

Redis 큐

Redis는 웹 클라이언트에서의 처리가 평소보다 오래 걸릴 수 있는 태스크를 큐에 추가할 수 있습니다. 다중 프로세스 태스크 큐는 오늘날의 많은 웹 기반 애플리케이션에서 일반적으로 사용되며, Redis를 사용하면 요청/응답 주기의 백그라운드에서 실행되는 자동화된 Python 작성 프로세스를 손쉽게 구현할 수 있다.


Redis 데이터 유형

기술적으로는 키/값 저장소인 Redis는 다음을 포함하여 여러 데이터 유형 및 구조를 지원한다.

  1. 고유하고 정렬되지 않은 문자열 요소
  2. 바이너리 안전 데이터
  3. HyperLogLog
  4. 비트 배열
  5. 해시
  6. 리스트

기능 및 특징

1. Redis Sentinel

Redis Sentinel은 개발자가 클라이언트의 가용성을 높이기 위해 인스턴스를 조정하는 데 도움이 되는 독립형 분산 시스템이다. Sentinel은 마스터 및 슬레이브 인스턴스에 문제가 있을 때 일련의 모니터링 프로세스, 알림 및 자동 장애 조치를 사용하여 사용자에게 알리고, 필요한 경우 애플리케이션에 대한 새 연결을 자동으로 재구성할 수 있다.

2. Redis Cluster

Redis Cluster는 여러 노드에 데이터 세트를 자동으로 분할하는 Redis의 분산 구현이다. 이는 노드 서브세트가 클러스터의 나머지 부분과 통신할 수 없는 경우에도 지속적인 작업을 보장하면서 데이터베이스 배포의 성능과 확장성을 높인다.

3. Redis Pub/Sub

Redis는 게시 및 구독(Pub/Sub) 명령의 사용을 지원한다.

4. Redis 지속성

Redis는 프로세스 중단 및 네트워크 병목 현상이 발생한 후에도 유지되도록 설계된 영구 디스크 스토리지를 사용한다. Redis는 데이터의 정기적인 스냅샷을 만들고 사용 가능해지면 변경 사항을 추가하여 데이터세트를 유지할 수 있다. 그런 다음, 데이터베이스 내구성과 무결성을 보장하기 위해 요청 시 또는 일정한 간격마다 자동으로 이러한 데이터베이스 백업을 생성하도록 Redis를 구성할 수 있다.

5. Single Threaded

한 번에 하나의 명령만 처리할 수 있다. 그렇기 때문에 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요하다. (하지만 get, set 명령어의 경우 초당 10만 개 이상 처리할 수 있을 만큼 빠르다.)


기존 DB가 있는데도 Redis를 사용하는 이유

DB는 데이터를 디스크에 직접 저장(write)하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는데 매번 디스크에 접근해야하기 때문에 사용자가 많아질수록 부하가 많아져 느려질 수 있다. 따라서 캐시 서버를 도입하여 사용하면 속도를 개선할 수 있는데, 이 캐시 서버로 이용할 수 있는 것이 바로 Redis이다. 같은 요청이 여러번 들어올 때 Redis를 사용함으로써 매번 DB를 거치지 않고 캐시 서버에 저장해놨던 값을 바로 가져와 DB의 부하를 줄이고 서비스의 속도도 느려지지 않게 할 수 있다.


Ref.

judy

About judy

junior BE

Comments

comments powered by Disqus