Redis
- Key-Value기반 In-memory 데이터 구조 저장소
- Key-Value이기 때문에 쿼리를 날릴 필요 없이 원하는 결과를 바로 조회할 수 있다.
- Single-thread 기반으로 동작한다.
- 모든 자료구조는
atomic 하며 이로 인해 데이터의 정합성이 보장된다.
- 현재 처리되고 있는 명령어에 대한 작업이 끝나기 전까지 다른 명령어들은 대기해야 한다는 단점이 있다.
- 빠른 성능
- 디스크에 액세스해야 할 필요를 없앰으로써 검색 시간으로 인한 지연을 방지하고 CPU 명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스 가능
- 일반적으로 작업을 실행하는 데 1ms 미만이 소요
- 복제 및 지속성
마스터-슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있다.
- 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공
특정 시점 스냅샷(Redis 데이터 세트를 디스크로 복사 - RDB)과 데이터가 변경될 때마다 이를 디스크에 저장하는 Append Only File(AOF) 생성을 모두 지원한다.
- 장애 발생 시 Redis 데이터를 신속하게 복원 가능
- 사용 사례
- 캐싱
- 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여준다.
- 세션 관리
- 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있다.
- 대기열
- Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있다.
- 실시간 순위표
- Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬된다. 이를 통해 손쉽게 동적 순위표를 생성하여 보여줄 수 있다.
Cache
- 요청의 결과를 저장해두었다가 이후 같은 요청 시 저장된 결과를 바로 반환하게 하여 빠르게 서비스 해주는 것을 의미한다.
Look aside Cache
-
가장 많이 사용하는 구조

- Memory cache를 이용하면, 훨씬 더 빠른 속도로 서비스가 가능하다.
Write Back
-
쓰기 작업이 빈번한 구조에서 사용하는 구조

- Cache에 일정 시간 동안의 데이터를 먼저 저장 후, 특정 시점 또는 일정한 크기가 되면 DB에 저장하는 방식이다.
- 자주 데이터를 쓰게될 경우 Disk에 자주 접근하게 되기 때문에 Application의 속도 저하를 없애기 위한 방식
- ex) Insert 쿼리 1개 500번 VS Inser 쿼리 500개 1번
- 후자의 방식이 훨씬 빠르다. 이러한 개념을 이용한 것이 Write Back 구조이다.
- 로그를 기록하거나, 백업할 경우 많이 사용된다.
- 메모리에 먼저 저장을 하기 때문에, 장애가 생길 경우 데이터가 모두 사라질 위험이 있다.
Collection
- Redis에서는 Memcached에서 제공하지 않는 List, Set, Sorted Set, Hash 등의 Collection을 제공한다.
Collection을 구현하지 않아도 되기 때문에 개발 편의성이 좋고, 난이도가 훨씬 낮아진다.
- 개발 시간을 단축시키고, 문제를 줄여줄 수 있기 때문에 Collection은 중요하다.
개발 편의성
- 랭킹 서버를 직접 구현할 경우
- DB에 Score를 저장후 Score로 Order by 정렬 후 읽어온다.
- 개수가 많아지면, 디스크에 접근을 하기 때문에 속도에 문제가 발생할 수 있다.
- Redis를 사용할 경우
- Sorted Sets이라는 Collection을 사용하면 된다.
- 구현해놓은 기능을 사용해야하기 때문에, 해당 기능에 종속적이게 된다.
- 많이 저장할수록 메모리를 많이 차지하지 않을까?라고 생각할 경우에도 많은 용량을 차지하지 않기 때문에 걱정없이 사용하면 된다.
개발 난이도