자주 접근하는 데이터를 더 빨리 접근 가능한 위치에 저장한다. 요청마다 DB에서 데이터를 다시 계산하거나 검색할 필요 없이 캐시에서 데이터를 빠르게 데이터를 제공할 수 있다.
캐시가 만료되거나 초기화될 때 여러 클라이언트가 동시에 동일한 데이터를 요청하면서 대량의 요청이 한꺼번에 데이터베이스로 몰리는 현상.
이로 인해 서버가 과부하에 걸리거나 DB에 성능이 크게 저하될 수 있음.
- Locking : 캐시에 데이터가 없을 경우 첫 번째 요청만이 DB에 접근하도록 잠금을 설정하고 나머지 요청은 대기
- ~~Lazy Expiration: 캐시가 만료될 때, 요청을 처리하면서 비동기적으로 캐시를 갱신한다.~~
- Randomized TTL : 데이터마다 만료시간을 랜덤하게 설정하여 동일 시간에 캐시가 대거 만료되는 것을 방지한다.
Redis는 오픈소스 인메모리 데이터 구조 저장소이다. 캐싱 뿐만 아니라 세션 관리, 실시간 분석, 메세지 큐 등 다양하게 활용할 수 있다.
오픈 분산 메모리 캐싱 시스템이다. RAM에 데이터를 저장한다. 읽기 작업이 많은 애플리케이션에 이상적이다. 하지만 RAM에만 데이터를 저장하기 때문에 영구적이지 않다. 따라서 데이터 손실이 용납될 수 없는 경우 Redis와 같은 영구적인 솔루션이 더 선호된다.
정적 콘텐츠를 전 세계의 여러 서버에 캐싱하여 사용자가 가장 가까운 서버에서 콘텐츠에 엑세스할 수 있도록 보장한다. 이를 통해 서버 부하가 줄어들고, 대역폭 비용이 낮아지며 페이지 로딩 속도가 크게 향상된다.
캐싱 시스템의 주요 단점 중 하나는 데이터 불일치 문제이다. 캐시된 데이터가 최신이 아닐 수 있으며, 이로 인해 사용자에게 오래되거나 잘못된 정보가 제공될 수 있다.