레디스(Redi)란?
: Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템
(데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소)
- db-engines.com 에서 key, value 저장소 중 가장 순위가 높다.
▣ 레디스의 특징
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
- 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
- String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원한다.
1) String : 가장 일반적인 key - value 구조의 형태
2) Sets : String의 집합입니다. 여러 개의 값을 하나의 value에 넣을 수 있다. 포스트의 태깅 같은 곳에 사용됨.
3) Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조로 랭킹 보드 서버 같은 구현에 사용할 수 있음.
4) Lists : Array 형식의 데이터 구조이다. List를 사용하면 처음과 끝에 데이터를 넣고 빼는 건 빠르지만 중간에 데이터를 삽입하거나 삭제하긴 어려움.
- Single Threaded이다.
: 한 번에 하나의 명령만 처리할 수 있다. 그렇기 때문에 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요함.
▣ 레디스 사용 주의할 점
- 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 꼭 필요하다.
: 인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문
- 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피해야 한다.
- 메모리 관리가 중요하다.
레디스 영속성
: 레디스는 지속성을 보장하기 위해 데이터를 DISK에 저장할 수 있다. 서버가 내려가더라도 DISK에 저장된 데이터를 읽어서 메모리에 로딩을 한다.
※ 데이터를 disk에 저장하는 방식은 크게 두 가지가 있다.
- RDB(Snapshotting) 방식
:순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식
- AOF (Append On File) 방식
: Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태
RDB 방식
1. 장점 :
1) RDB는 단일 파일이며, 특정 시점의 메모리에 있는 데이터 전체를 바이너리파일에 저장한다. -> 백업에 매우 효과적임.
2) RDB는 Redis 부모가 영속화를 위해 단지 자식을 fork()하면되기 때문에 간편하다. -> RDB는 AOF에 비해서, 큰 데이터를 빠르게 재시작한다.
2. 단점 :
1) RDB는 Redis가 멈추는 경우 데이터 손실을 최소화해야 할 때 성능이 좋지 않다.
2) RDB는 가끔 자식 프로세스를 이용해 디스크에 영속화하는 fork()가 필요하다.
-> fork()는 데이터가 너무 크면, 작업 시간이 길어질 수 있고, 수백만초 혹은 심지어 1초 이상 동안 클라이언트가 Redis 기능을 사용하지 못하는 상황이 발생할 수 있음.
AOF 방식
1. 장점 :
1) AOF는 내구성이 훨씬 좋다. -> fsync 비활성화, 매초 fsync(default), 매 쿼리 fsync 등등 여러 fsync 정책 수립 가능.
2) AOF 로그는 추가전용(append-only)이기 때문에, 검색이 없고, 장애 시에도 문제가 없다. -> 어떠한 이유로 로그가 반쯤 작성된 명령어로 끝나더라도, 손쉽게 복구할 수 있음.
2. 단점 :
1) AOF 파일들은 같은 데이터 기준으로 RDB보다 훨씬 용량이 크다.
2) AOF는 fsync 정책에 따라 RDB보다 성능이 느릴 수 있다.
레디스에 대해서는 처음 들어봤는데 이해하기 쉽게 잘 정리하신 것 같아요 !🙌🙌