Key-Value 구조의 비정형 데이터를 저장 + 관리하는 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)이다.
데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조로 구성되어 있다.
데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까?
데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 생겨 갑작스럽게 다운 되더라도 데이터의 손실이 없다. 하지만 매번 디스크로 접근해야 하는 단점이 있다.
만약 서비스의 규모가 큰 서버를 운영한다고 생각해보자. 클라이언트가 요청을 할 때마다 매번 디스크로 접근을 한다면 사용자가 많아질 수록 디스크에 접근하는 횟수가 많아져 서비스가 느려질 것 이다.
이러한 문제를 해결하기 위해 캐시 서버로 사용할 수 있는 것이 바로 Redis 이다.
캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 해준다. 따라서 같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라 캐시 서버에서 첫 번째 요청 이후에 저장된 결과 값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도가 느려지지 않는다는 장점이 있다.
캐시 서버는 Look aside cache 패턴과 Write Back 패턴이 존재합니다.
Look aside cache
Write Back
Redis는 Memcached와 비슷한 캐시 시스템으로 동일한 기능을 제공할 뿐만 아니라 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있음. Redis는 모든 데이터를 메모리에 저장하고 조회함. 즉, 인메모리 데이터베이스임. Redis는 모든 데이터를 메모리에 저장하는 빠른 DB라고 생각할 수도 있지만 이것은 Redis의 특징 중 일부분으로 다른 인메모리 디비들과의 가장 큰 차이점은 Redis의 다양한 자료구조이다.
다양한 자료구조를 지원함으로 개발의 편의성 및 난이도가 낮아진다는 장점이 있다. 예를 들어, 어떤 데이터를 정렬 해야하는 상황이 있을 때, DBMS를 이용한다면 시간이 오래 걸릴 것이다. 하지만 이 때 Redis의 Sorted-Set을 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
Redis는 지속성을 보장하기 위해 데이터를 DISK에 저장할 수 있습니다. 서버가 내려가더라도 DISK에 저장된 데이터를 읽어서 메모리에 로딩을 합니다.
데이터를 DISK에 저장하는 방식은 크게 두 가지 방식이 있습니다.