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 (Redis Data Base)
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 파일은 일반적으로 동일한 데이터 세트에 대한 동등한 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
1. 공식사이트에서 Redis-x64-3.0.504.msi 다운로드
2. 설치할 경로 지정
3. 포트 번호 설정(기본 포트 : 6379)
4. Redis에 할당할 메모리 크기 지정(기본 100MB)
5. Redis 설치 경로에서 redis-cli.exe 실행 후 ping 입력
'Language > Spring' 카테고리의 다른 글
[Spring Boot] 정해진 시간마다 동작하는 Scheduler (0) | 2024.08.19 |
---|---|
[Spring Boot] Redis를 이용한 이메일 인증 리팩토링 (0) | 2024.08.13 |
[Spring Boot] 이메일 인증 코드를 이용한 회원 가입 (0) | 2024.08.13 |
[Spring Boot] 구글 이메일 인증 코드 발급 구현 (0) | 2024.08.13 |
JpaAuditing 사용 방법 및 예제 (0) | 2024.08.12 |