요약
- Redis는 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)
- 인메모리 데이터 구조를 가진 저장소
- 데이터베이스, 캐시, 메세지 브로커로 사용
- 사용자가 늘어나면 데이터 베이스가 과부하될수있기 때문에, 캐시 서버를 도입하는데, 이 캐시 서버로 사용할수 있는것이 Redis
- Redis(캐시서버)를 통해, 한번 읽어온 데이터를 임의의 공간에 저장하여, 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간입니다.
- 같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라, 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에, DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있음
Redis란?
Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다.
데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소입니다.
Redis의 특징
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없습니다.
- 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠릅니다.
- String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원합니다.
데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조 저장소를 사용하는 이유는 무엇일까요?
데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에, 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않습니다.
하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있는데요.
일반적으로 서비스 운영 초반이거나 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터 베이스에 무리가 가지 않습니다.
하지만 사용자가 늘어난다면 데이터 베이스가 과부하 될 수 있고, 이때 캐시 서버를 도입하여 사용합니다.
그리고 이 캐시 서버로 이용할 수 있는 것이 바로 Redis 입니다.
캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여, 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간입니다.
같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라, 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에, DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있습니다.
캐시 서버는 Look aside cache 패턴과 Write Back 패턴이 존재합니다.
- Look aside cache
1. 클라이언트가 데이터를 요청
2. 웹서버는 데이터가 존재하는지 Cache 서버에 먼저 확인
3. Cache 서버에 데이터가 있으면 DB에 데이터를 조회하지 않고 Cache 서버에 있는 결과값을 클라이언트에게 바로 반환 (Cache Hit)
4. Cache 서버에 데이터가 없으면 DB에 데이터를 조회하여 Cache 서버에 저장하고 결과값을 클라이언트에게 반환 (Cache Miss)
- Write Back
1. 웹서버는 모든 데이터를 Cache 서버에 저장
2. Cache 서버에 특정 시간 동안 데이터가 저장됨
3. Cache 서버에 있는 데이터를 DB에 저장
4. DB에 저장된 Cache 서버의 데이터를 삭제
* insert 쿼리를 한 번씩 500번 날리는 것보다 insert 쿼리 500개를 붙여서 한 번에 날리는 것이 더 효율적이라는 원리입니다.
* 이 방식은 들어오는 데이터들이 저장되기 전에 메모리 공간에 머무르는데 이때 서버에 장애가 발생하여 다운된다면 데이터가 손실될 수 있다는 단점이 있습니다.