본문 바로가기

Language/Spring

레디스(Redis) 개념 및 설치

1. 레디스(Redis)란?

  • 키(key)와 값(value)를 가진 NoSQL에 속하는 데이터베이스
  • 주로 비정형 데이터를 다루며 비관계형 데이터베이스
    → 비정형 데이터 : 식별 가능한 구조나 아키텍처가 없는 데이터
  • key, value 구조이기 때문에 쿼리가 필요 없음

 

레디스에서 지원하는 자료 구조

  • Strings : Vinary-safe한 기본적인 key-value 구조
  • Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용
  • Sets : 유일한 값들의 모임인 자료구조, 순서는 유지되지 않음
  • Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지
  • Hashes : 내부에 key-value 구조를 하나더 가지는 Reids 자료구조
  • Bit arrays(bitMaps) : bit array를 다를 수 있는 자료구조
  • HyperLogLogs : HyperLogLog는 집합의 원소의 개수를 추정하는 방법, Set 개선된 방법
  • Streams : Redis 5.0 에서 Log나 IoT 신호와 같이 지속적으로 빠르게 발생하는 데이터를 처리하기 위해서 도입된 자료구조

 

2. 레디스 데이터는 휘발성 ? 비휘발성 ?

  • Redis는 인 메모리 데이터베이스이기에 휘발성인 MM에 데이터를 저장을 하기 때문에 서버가 다운된다면 데이터의 유실이 발생이 일어날 수 있음
  • 따라서 레디스는 데이터의 영속성을 보장하기 위해 디스크에도 데이터를 저장하여 서버가 다운되어도 디스크에 저장해놓았던 데이터를 다시 메모리에 가져올 수 있음
  • 레디스가 메모리의 데이터를 디스크에 저장하는 방법 4가지
    • RDB (Redis Data Base)
      • RDB 지속성은 지정된 간격으로 데이터 세트의 특정 시점 스냅샷을 수행
    • AOF (Append Only File)
      • AOF 지속성은 서버에서 수신한 모든 쓰기 작업을 기록
      • 이러한 작업은 서버 시작 시 다시 재생되어 원본 데이터 세트를 재구성 가능
    • 지속성 없음
      • 지속성을 완전히 비활성화 가능
      • 캐싱할 때 가끔 사용
    • RDB + AOF
      • 동일한 인스턴스에서 AOF와 RDB를 같이 사용 가능

RDB의 장점

  • RDB는 Redis 데이터의 매우 작은 단일 파일 특정 시점 표현
  • RDB 파일은 백업에 적합
    Ex) 1시간마다 데이터 백업
  • DR(재해 복구)에 매우 유용
  • 레디스의 상위 프로세스가 디스크 I/O 등을 수행하지 않기 때문에 성능이 최대화
  • 디스크에서 RDB는 다시 시작 및 장애 조치 후 부분 재동기화를 지원

RDB의 단점

  • 레디스가 오랜 시간 동안 비정상적으로 작동을 멈춘 경우 최근 데이터의 백업이 불가능
  • 일반적으로 5분마다 RDB 스냅샷을 생성하긴 하지만 Redis가 어떤 이유로든 비정상적으로 작동을 멈춘다면, 그에 대한 방안 마련 필요
  • RDB는 상위 프로세스를 사용하지 않는 만큼 하위 프로세스를 사용
  • 따라서 하위 프로세스는 디스크에 데이터를 유지하기 위해 잦은 디스크 I/O가 발생
  • fork(디스크 I/O)는 데이터 세트가 큰 경우 시간이 많이 소요될 수 있으며, 데이터 세트가 매우 크고 CPU 성능이 좋지 않은 경우 클라이언트 서비스가 다운될 수 있음

AOF의 장점

  • AOF는 다른 fsync 정책을 가질 수 있기 때문에 RDB보다 내구성이높음
  • fsync는 백그라운드 스레드를 사용하여 수행되며 기본 스레드는 fsync가 진행 중이지 않을 때 쓰기(write) 작업을 계속 진행
  • redis-check-aof가 지원되어 로그 파일을 쉽게 수정 가능
  • 레디스는 AOF가 너무 커지면 백그라운드에서 자동으로 다시 작성 가능

AOF의 단점

  • AOF 파일은 일반적으로 동일한 데이터 세트에 대한 동등한 RDB 파일보다 용량이 큼
  • AOF는 정확한 fsync 정책에 따라 RDB보다 느릴 수 있음
  • 일반적으로 fsync를 매초 로 설정해도 성능은 여전히 ​​매우 높으며, fsync를 비활성화하면 높은 트래픽에서도 RDB만큼 빨라질 수 있음

 

3. RDB vs AOF 무엇을 사용?

  • 보통 AOF 기법을 사용한다고 함
  • RDB보다 높은 품질의 데이터 백업이 가능할뿐더러, 성능 또한 RDB보다 많이 뒤처지지 않음
  • 하지만 레디스 공식 문서에서는 AOF만 사용하는 사람들이 많지만, 때때로 RDB 스냅샷을 갖는 것이 데이터베이스 백업을 수행하고 더 빠른 재시작이 가능하다고 함
  • RDB + AOF을 함께 사용하여 AOF를 default로 하되 RDB를 옵션으로 사용

 

4. 레디스 적용 사례

  • 한 번만 가능한 기능
    • 좋아요 또는 구독 기능 같이 한 사람당 한 번만 가능한 기능
    • RDBMS에도 유니크 제약 조건을 설정하여 구현이 가능하나, 이러한 작업은 빈번한 insert, update가 발생하기 때문에 성능의 저하가 일어날 수 있음
  • 데이터에 유효 시간 부여
    • 회원 가입 시 이메일 인증이 필요할 때, 이메일 인증 코드의 유효 시간을 3분 또는 5분으로 설정하는 기능 등에 사용 가능

Redis 설치

https://github.com/microsoftarchive/redis/releases

 

Releases · microsoftarchive/redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis

github.com

1. 공식사이트에서 Redis-x64-3.0.504.msi 다운로드

2. 설치할 경로 지정

3. 포트 번호 설정(기본 포트 : 6379)

4. Redis에 할당할 메모리 크기 지정(기본 100MB)

5. Redis 설치 경로에서 redis-cli.exe 실행 후 ping 입력