[ 2022.11.29 TIL-Redis란? ]
Cache(캐시)
✏️ Cache란?
- 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해주는 것
- 미리 결과를 저장, 요청이 오면 그 요청에 대해 DB/API를 참조하지 않고 Cache에 접근하여 요청을 처리하는 기법
- 모든 결과를 캐싱할 필요 없이 서비스를 할 때 많이 사용되는 데이터만 캐싱함으로써 전체적인 효율을 올림
✏️ Cache 구조
- Look aside cache
- Web Server는 데이터가 존재하는지 Cache를 연계 확인
- Cache에 데이터가 있으면 Cache에서 가져옴
- Cache에 데이터가 없다면 DB에서 가져옴
- DB에서 가져온 데이터를 Cache에 다시 저장
- Write Back
- Web Server는 모든 데이터를 Cache에 저장
- Cache에 특정 시간동안의 데이터가 저장
- Cache에 있는 데이터를 DB에 저장
- DB에 저장된 데이터를 삭제
- 단점
- 메모리에 저장되기 때문에 장애가 생기면 데이터가 사라질 가능성 존재
✏️ Memcached
- Memcached란?
- 무료로 사용할 수 있는 오픈 소스
- 분산 메모리 캐싱 시스템
- DB부하를 줄여 동적 웹 애플리케이션의 속도 개선을 위해 사용
- key-value형태로 메모리에 저장
- 장점
- 시스템의 사용되지 않은 일부 메모리를 활용할 수 있어 남는 자원을 효율적으로 사용하여 성능 향상
- 단점
- 인 메모리 기반의 시스템으로 재부팅 시 데이터가 소멸
- 영구 저장이 필요하면 해당 데이터를 DB에 저장하고, 재부팅 시 DB에서 데이터를 가져와야함
Redis
✏️ Redis란?
- 오픈 소스로서 NoSQL로 분류
- Memcached와 같이 인 메모리 솔루션
- 비관계형 데이터베이스
- 메모리 기반의 '키-값' 구조의 데이터 관리 시스템
- 모든 데이터를 메모리에 저장하고 조회하기에 빠르다
- 데이터는 메모리와 디스크에 저장이 되기 때문에 데이터 복구가 가능
✏️ Redis 특징
- 영속성을 지원하는 인 메모리 데이터 저장소
- 다양한 자료 구조를 지원
- 싱글 스레드 방식으로 인해 연산을 원자적으로 수행이 가능
- 읽기 성능 증대를 위한 서버 측 리플리케이션을 지원
- 리플리케이션(Replication) : 이중화 개념, 데이터를 거의 실시간으로 다른 레디스 노드에 복사하는 방식, 복제 서버는 읽기만 가능
- 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원
- 샤딩(Sharding) : 테이블의 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법
- 다양한 서비스(DB, Cache, Message Queue, Shared Memory 등)에서 사용되며 검증된 기술
✏️ Redis 장점
- 리스트, 배열과 같은 데이터 처리에 유용
- 리스트형 데이터 입력과 삭제가 빠름
- 메모리를 활용하면서 영속적인 데이터 보존
- Redis Server는 1개의 싱글 쓰레드로 수행되며, 서버 하나에 여러 개의 서버를 띄우는 것이 가능 (Master-Slave 구조)
✏️ Redis 단점
- Key-Value 형태로 저장된 데이터를 레디스 내에서 처리하는 것이 어렵움
✏️ Redis 영속성
- Redis는 영속성을 보장하기 위해 데이터를 디스크에 저장
- 디스크에 저장된 데이터를 읽어서 메모리에 로딩
- 디스크에 저장하는 방법
- RDB(Snapshotting) 방식
- 순간적으로 메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식
- AOF(Append On File) 방식
- Redis의 모든 Write/Update 연산 자체를 모두 log파일에 기록하는 형태
✏️ Redis에서 지원하는 데이터 형식

✏️ Redis VS Memcached

✏️ Redis가 주목받는 이유
- 데이터 저장소로 입력/출력이 가장 빠른 메모리를 채택
- 단순 구조의 데이터 모델인 key-value 방식을 통해 빠른 속도
- 캐시 및 데이터 스토어 유리
- 다양한 API 지원
✏️ Redis 사용시 주의할 점
- 서버 장애 발생 시 운영 플랜
- 서버 장애 발생했을 때 데이터 유실이 발생할 가능성 존재
- 메모리 관리 중요
- 한 번에 하나의 명령만 처리
✏️ Redis 면접 질문
✏️ Redis 추가로 공부하면 좋은 기술들
- 참고할만한 사이트
- Spring - Redis 연동 및 사용 방법
- Single Redis Instance
- Redis Replication
- Redis HA
- Redis Sentinel
- Redis Cluster
참고