본문 바로가기

REDIS

(3)
[Redis] Cache Stampede: 캐시가 만료되는 순간, 모든 요청이 DB로 몰린다면 Cache Stampede란?Cache Stampede(Thundering Herd)는 동일한 캐시 키가 만료되는 시점에 다수의 요청이 동시에 DB로 몰리는 현상이다.정상적인 캐시 흐름에서는 Cache Miss가 발생하면 하나의 요청이 DB에서 데이터를 가져와 캐시에 저장하고, 이후 요청은 캐시에서 처리된다. 하지만 캐시가 만료되는 바로 그 순간에 여러 요청이 동시에 도착하면 상황이 달라진다.모든 요청이 캐시 미스를 경험하고, 각각 독립적으로 DB에 동일한 쿼리를 실행한다. 요청이 수백, 수천 건이라면 DB에 순간적인 부하 폭증이 발생한다.왜 발생하는가?Write Through로 해결할 수 없는가?"캐시를 항상 최신 상태로 유지하면 만료될 일이 없지 않은가?"라는 생각이 들 수 있다. Write Thro..
[Redis] Cache Penetration: 존재하지 않는 데이터에 대한 요청이 캐시를 뚫고 DB를 때린다면 Cache Penetration이란? Cache Penetration은 존재하지 않는 데이터에 대한 요청이 캐시를 무력화시키는 현상이다.일반적인 캐시 조회 흐름을 먼저 살펴보자.이 흐름은 데이터가 존재하는 경우에는 잘 동작한다. Cache Miss가 발생해도 DB에서 조회한 결과를 캐시에 저장하므로, 이후 동일한 요청은 캐시에서 처리된다.그런데 존재하지 않는 데이터를 요청하면 어떻게 될까?DB 조회 결과가 null이면 캐시에 저장할 값이 없다. 따라서 같은 요청이 반복될 때마다 매번 캐시를 통과해서 DB에 직접 도달한다. 이것이 Cache Penetration이다.왜 위험한가?단순히 한두 건의 요청이라면 큰 문제가 아니다. 하지만 다음과 같은 상황을 생각해보자.악의적인 사용자가 존재하지 않는 ID를 랜덤..
Redis란? Redis는 Remote Dictionary Sever 의 약자로, 데이터를 드스크가 아닌 메모리에 저장하는 방식의 오픈소스 인메모리 데이터 저장소이다. Key-Value 구조를 사용하며, 초당 5만에서 25만 건의 요청을 처리할 수 있는 뛰어난 성능을 자랑한다.Redis GitHub에서 소스를 확인할 수 있다.Redis의 특징1. Key-Value 기반 구조Redis는 Key-Value Store라는 점에서 자바의 해시 테이블과 유사하다. 데이터는 메모리에 저장되므로 빠른 응답 속도와 높은 처리율을 제공한다. 그러나 메모리는 디스크보다 비싸고, 대규모 데이터를 저장하기에는 비용적인 제약이 있다.2. 데이터 지속성Redis는 메모리에 저장된 데이터를 디스크에 영구적으로 저장할 수 있는 기능을 제공한다. ..