반응형
레디스를 처음 접했을 때 비관계형, 인메모리 캐시 DB 정도의 키워드로 알고 있었다.
정확히 알지는 못해서 알아보도록 한다.
정의
Redis는 기본 데이터베이스, 캐시, 메시지 브로커 및 대기열로 가장 일반적으로 사용되는 오픈 소스 인메모리 키-값 데이터 저장소입니다. Redis는 밀리초 미만의 응답 시간을 제공하여 게임, 핀테크, 광고 기술, 소셜 미디어, 의료 및 IoT와 같은 산업에서 빠르고 강력한 실시간 애플리케이션을 가능하게 합니다.
이말인 즉슨, 관계형 DB가 아니며 응답 시간이 빨라 실시간을 요하는 애플리케이션에 용이하다고 보인다.
레디스 에서의 Cache라는 뜻은 왜 나온 것이고 왜 쓰는 걸까?
일반 DB에서는 매번 디스크에 정보를 저장하기 때문에 서버가 다운 되어도 정보가 사라지지 않는다.
그러나 일반 DB에서 매번 디스크에 있는 정보를 불러오기 위해 접근하게 되면 부하가 많아져 느려질 수 있다.
사용자가 많아지면 많아질 수록 부하가 늘어나니 Cache를 통해 부하를 줄일 수 있을 것이다.
일반 DB로 통신을 하기 이전에 Cache DB로 레디스를 사용하게 되면 인-메모리 DB로 인해 빠른 응답을 이용해 효과적으로 부하를 줄일 수 있다.
레디스는 아래와 같은 특징을 갖고 있다.
- Key-Value 구조를 이용해 쿼리를 하지 않아도 된다.
- 데이터를 디스크에 쓰는 구조가 아니라 메모리에 저장하기 때문에 속도가 현저히 빠름
- String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원한다. 다양한 자료 구조를 통해 개발 편의성이 올라감.
- String : 가장 일반적인 Key-Value 구조
- Lists : Array 형식의 데이터 구조, 처음과 끝에 데이터를 넣는 것은 쉽지만 중간에 데이터를 넣기에는 어렵다.
- Sets : String의 집합, 여러 개의 값을 하나의 value에 집어 넣을 수 있다.
- Sorted Sets : 중복된 데이터를 담지않는 Set 구조에 정렬을 적용한 구조, 랭킹 보드 같은 곳에 활용 가능하다.
- Hashes : Field-Value 구조, 가장 일반적으로 객체를 나타냄
- Single Thread 이다.
- 한 번에 하나의 명령어만 처리할 수 있음.
레디스의 휘발성으로 인한 데이터 유실을 방지하기 위해서 아래와 같은 방안이 있다.
- RDB Files (Redis Database) :
- 특정 시점의 메모리 안에 있는 데이터 전체를 저장하는 것. 스냅샷 방식
- 바이너리 형태로 저장되어 사람이 읽을 수 없다.
- AOF (Append Only File) :
- 모든 명령 작업을 기록 후 서버 시작 시 원본 데이터셋을 재구성 할 수 있다.
- 특정 파일의 형태로 조회 명령을 제외한 입력/수정/삭제 명령이 실행될 때마다 버퍼에 기록 후 파일로 동기화된다.
장단점
- 장점 :
- 인-메모리 DB의 특성 상 빠른 읽기 및 쓰기 작업
- 다양한 데이터 구조를 이용해 데이터를 효율적으로 모델링하고 특정 사용 사례에 가장 적합한 데이터 구조 선택 가능
- 단점 :
- 메모리에 데이터를 저장하기 때문에 서버가 종료되면 휘발성으로 치명적인 오류를 야기할 수 있다.
- 메모리 관리를 잘 못하게 되면 레디스 부하, 서버 부하로 인해 서버 종료 위험이 있다.
- 싱글 스레드 특성 상 한 번에 하나의 명령만 처리 가능함. 처리하는 데 시간이 오래 걸리는 요청, 명령은 피해야 한다.
내 생각
Redis는 메모리에 데이터를 저장하는 DB이고, 메모리는 휘발성이기 때문에 이로 인한 백업 정책을 RDB, AOF로 세운다.
데이터 읽기 쓰기가 빠르기 때문에 실시간 데이터 분석에 용이한듯 하다.
메모리에 저장돼서 서버가 중지되면 데이터 유실 가능성 있다는 단점도 있다.
단점을 극복해 사용하면 일반 DB보다 더 빠른 처리가 가능하고 데이터 스트럭쳐를 이용해 개발하기 편할듯!
[참조] :
https://wildeveloperetrain.tistory.com/21
반응형
'CS 지식' 카테고리의 다른 글
API란? (0) | 2022.06.25 |
---|---|
CORS란? (0) | 2022.06.25 |
정적 분석과 동적 분석 (0) | 2022.06.18 |
컴파일러와 인터프리터란? (0) | 2022.05.25 |
가상화란? (0) | 2022.05.24 |