Redis

이동현·2023년 4월 24일
0

코드 캠프 블로그

목록 보기
34/50

redis

더 빠른 검색을 위해서 redis라는 곳에 저장을 한다.

  • Redis는 Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있습니다. 

  • redis는 인메모리기반에 데이터베이스이다.

  • 컴퓨터를 껐다켰을 때 데이터가 날아갈 수도 있다.

  • 성능을 위해서 사용하는 것이기 때문에 보조용으로만 사용한다.

  • 다양한 자료구조를 지원하기에 개발의 편의성이 좋아지고 난이도가 낮아진다.

Feature of Redis

레디스는 고성능 키-값 저장소로서 Stirng , list, hash, set, sorted set형식의 데이터를 지원하는 NoSQL입니다.
edis 이전 버전으로 Memcached가 있다.

Redis vs Memcached

공통점

  1. 1ms 이하의 응답대기시간

1ms 이하의 응답시간을 제공합니다. 데이터를 메모리에 저장하기 때문에, 디스크 기반의 데이터 베이스보다 빠르게 데이터를 읽을 수 있습니다.

  1. 개발의 용이성

문법적으로 사용하기 쉽고, 개발코드 양 또한 적습니다.

  1. 데이터 파티셔닝

데이터를 여러 노드에 분산하여 저장시킬 수 있습니다. 따라서 수요가 증가할 때 더 많은 데이터를 효과적으로 처리하기 위하여 스케일아웃이 가능합니다.

  1. 다양한 프로그래밍 언어 지원

여러 개발언어를 지원합니다. 자바, 파이썬, C, C++, C#, JavaScript, Node.Js, Ruby, Go 그리고 다른 언어들을 지원합니다.

Redis에 대한 이해

Redis는 Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있습니다. 

레디스는 모든 데이터를 메모리에 저장하고 조회합니다. 즉, 인메모리 데이터베이스 입니다.

이 말만 들으면 Redis에 모든 데이터를 메모리에 저장하는 빠른 DB일 뿐이라고 생각할지도 모릅니다. 하지만 빠른 성능은 레디스의 특징 중 일부분 입니다.

다른 인메모리 디비들과의 가장 큰 차이점은 레디스의 다양한 자료구조 입니다.

https://miro.medium.com/max/700/1*tMiZs3RCrmxLGiFZgWRP6g.png

이렇게 다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 있습니다.

예를 들어, 어떤 데이터를 정렬 할 때, DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있습니다.

하지만 이 때 In-Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있습니다.

https://miro.medium.com/max/700/1*zArWVI0y5u_WVj0gktm92Q.png

Feature of Redis

NoSQL로서 Key-Value 타입의 저장소인 레디스(Redis, Remote Dictionary Server)의 주요 특징은 아래와 같습니다.

  • 영속성을 지원하는 인메모리 데이터 저장소
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원
  • 다양한 서비스에서 사용되며 검증된 기술
  • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원. 메모리 저장소임에도 불구하고 많은 데이터형을 지원하므로 다양한 기능을 구현

그래서 최종적으로 Redis를 한 문장으로 정의하면 아래와 같습니다.

레디스는 고성능 키-값 저장소로서 Stirng , list, hash, set, sorted set형식의 데이터를 지원하는 NoSQL입니다.

Redis 이전 버전으로 Memcached가 있습니다.
아래에서 Redis와 Memcached의 공통점, 차이점에 대해 자세히 알아보겠습니다.

**Redis vs Memcached**

공통점

  1. 1ms 이하의 응답대기시간

1ms 이하의 응답시간을 제공합니다. 데이터를 메모리에 저장하기 때문에, 디스크 기반의 데이터 베이스보다 빠르게 데이터를 읽을 수 있습니다.

  1. 개발의 용이성

문법적으로 사용하기 쉽고, 개발코드 양 또한 적습니다.

  1. 데이터 파티셔닝

데이터를 여러 노드에 분산하여 저장시킬 수 있습니다. 따라서 수요가 증가할 때 더 많은 데이터를 효과적으로 처리하기 위하여 스케일아웃이 가능합니다.

  1. 다양한 프로그래밍 언어 지원

여러 개발언어를 지원합니다. 자바, 파이썬, C, C++, C#, JavaScript, Node.Js, Ruby, Go 그리고 다른 언어들을 지원합니다.

Memcached만 의 특징

멀티스레드를 지원하기 때문에, 멀티프로세스코어를 사용할 수 있습니다. 따라서, 스케일업을 통하여 더욱 많은 작업처리를 할 수 있습니다.

Redis만 의 특징

1. 더욱 다양한 데이터 구조

문자열 뿐만 아니라 ListSet정렬된 SetHashBit 배열hyperloglogs (매우 적은 메모리로 집합의 개수를 추정할 수 있는 방법)을 지원합니다. 프로그램에서 위의 다양한 자료구조를 사용할 수 있습니다. 예를 들어, Sorted Set을 활용하여 게임유저의 상위랭크 정보를 쉽게 제공할 수 있습니다.

2. Snapshots

레디스는 특정시점에 데이터를 디스크에 저장하여 파일 보관이 가능합니다. 또한, 장애 상황시 복구에 사용할 수 있습니다.

3. 복제

Master — Salves 구조로, 여러개의 복제본을 만들 수 있습니다. 따라서 데이터베이스 읽기를 확장할 수 있기 때문에 높은 가용성(오랜 시간동안 고장나지 않음) 클러스터를 제공합니다.

3. 트랜젝션

트렌젝션이란 데이터베이스 상태를 변경시키는 작업 단위를 의미하고, 원자성, 일관성, 독립성, 지속성의 특징을 가지고 있습니다. Redis는 이러한 특징을 지원합니다.

4. Pub / Sub messaging

Publish(발행)과 Sub(구독)방식의 메시지를 패턴 검색이 가능합니다. 따라서 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있습니다.

5. 루아 스크립트 지원

매우 경량화된 절차스크립트 언어인 루아를 지원합니다. eval 명령어를 사용하여 루아스크립트를 실행시킬 수 있습니다. 따라서, 프로그램을 명료하게하고 성능을 높일 수 있습니다.

6. 위치기반 데이터 타입 지원

Redis는 실시간 위치기반데이터를 지원합니다. 따라서, 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기등의 작업을 수행할 수 있습니다. 이를 활용하여 맛집, 길찾기 그리고 지도기반의 고성능 서비스를 제공할 수 있습니다.

빠른검색용 vs 임시저장용

  • Write-Back 패턴은 redis에 캐쉬만 저장한다음에 천천히 MYSQL에 저장함으로서
    대량의 저장을 할 때 컴퓨터가 다운되는 것을 막아준다.

Cache-Aside 패턴

redis는 임시저장이라 ttl이라는 시간을 부여할 수 있다.
(integer) -1은 무제한이다
(integer) -2는 죽음을 의미한다.
yarn add cache-manager@4.1.0
yarn add cache-manager-redis-store@2.0.0
yarn add @nestjs/cache-manager
yarn add --dev @types/cache-manager-redis-store

0개의 댓글