1. Redis(Remote Dictionary Server)란?
- key, value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 DBMS
- 메모리에 저장하고 조회하는 인메모리 DB
- 다양한 자료구조를 지원한다.(아래 표 외에도 다양한 자료형을 지원한다.)
Type | 설명 |
String | 가장 일반적인 형태로, key - value 로 저장하는 형태 |
List | Array 형식의 데이터 구조로 List를 사용하면 처음과 끝에 데이터를 넣고 빼는것은 속도가 빠르지만 중간에 데이터를 삽입할 때 성능이 떨어질 수 있다. |
Set | 순서가 없는 Strings 데이터 집합으로 중복이 없다. |
Sorted Set | Sets와 같은 구조이지만 Score를 통해 순서를 정할 수 있다. |
Hash | Key-Value 구조를 여러개 가진 object 타입을 저장하기 좋은 구조 |
2. 인메모리 DB(Redis)를 사용하는 이유?
기존의 DB는 디스크에 직접 쓰기 때문에 매번 디스크에 접근하게 되면서 사용자가 많아질 수록 부하가 많아져서 성능이 저하될 수 있다.
Redis를 사용하면 한번 읽어온 데이터를 메모리 공간에 저장하고, 다음에 읽을 때 메모리에 있는 데이터를 빠르게 읽어오도록 하여 부하를 줄일 수 있다.
3. cache 전략
cache 전략에 따라 시스템 성능에 큰 영향을 끼친다.
- Look aside
- 웹서버는 cache에 데이터를 요청하고, cache는 데이터베이스로부터 데이터를 가져와서 cache에 저장하는 패턴
- 데이터를 변경할 때는 데이터베이스와 cache를 모두 업데이트 해야한다.
- Laze Loading이라고 한다.
- Write Back
- 데이터를 cache에 먼저 저장했다가 특정 시점마다 db에 전송하는 것입니다.
- 이렇게 된다면 매 요청마다 db에 접근할 필요없이 특정 시점이 왔을 때만 db에 접근해 속도 저하를 방지할 수 있습니다.
- 데이터 손실 가능성이 있다.
- Read Through
- cache에서만 데이터를 읽어오는 전력
- Write Through
- 데이터를 저장할 때 cache에 먼저 저장하는 방식
- Write Around
- 모든 데이터는 DB에 저장되고 읽은 데이터만 cache에 저장하는 방식
4. Redis 특징
- 다양한 자료구조를 지원한다.
- Single Theread를 사용하기 때문에 Race Condition에 빠질 수 없다. ⇒ 동시성 문제 발생 x (단, 시간복잡도가 커지면 성능에 치명적이므로 고려해야 한다.)
- 영속성을 지원하여 서버가 꺼지더라도 데이터를 디스크에 보존하고 있어 데이터 복구가 가능하다.
- expire를 설정해서 명시적으로 데이터 저장시간을 지정해야 함.
*race contion: 두 개 이상이 스레드가 하나의 리소스에 접근하기 위해 경쟁하는 상태
5. Redis 데이터 영속성
인메모리 DB임에도 불구하고, 메모리 데이터를 DISK에 저장할 수 있는 특징이 있다고 앞서 언급했다. 그래서 서버가 꺼지더라도, disk에 저장해놓은 데이터를 다시 읽어서 메모리에 로딩하기 때문에 데이터가 유실되지 않는다.
6. Redis에서 영속성을 지원하는 방법
Redis는 아래 두개지 방식으로 데이터를 저장하여 영속성을 지원한다.
- AOF(Append Only File)
- write/update 연산 자체를 모두 log 파일에 기록
- log 파일에 대해서만 append하기 때문에 log write 속도가 빠르다.
- log 파일을 읽고 write/update 연산을 다시 실행하기 때문에 로딩 속도가 느리다.
- RDB(snapshotting)
- 메모리에 있는 내용을 스냅샷을 떠서 DISK에 바이너리 파일로 옮겨 담는 방식
- snapshot 도중에 서버가 종료되면 데이터 유실 가능성이 있음.
- 바이너리 파일을 읽는 방식이므로 AOF 보다 로딩 속도가 빠르다.
AOF, RDB 상황에 따라 활성화 해서 백업 방식을 사용하면 된다. AOF, RDB에 대한 자세한 내용과 설정 방법은 아래 링크에서 확인할 수 있다.
Redis의 백업(RDB, AOF) 알아보기
Redis는 인메모리 데이터 저장소로 읽기 성능이 뛰어나 캐싱, 세션 저장소, RefreshToken 저장소 등 다양한 곳에 많이 사용됩니다.인메모리 데이터 저장소가 가지는 휘발성의 특성 때문에 종료되는
velog.io
'Data Infra > Redis' 카테고리의 다른 글
[Redis] Redis 백업 방법 (0) | 2024.11.11 |
---|---|
[Redis] dnf(yum) 으로 redis.3.2.12(구버전) 설치 (1) | 2024.09.11 |