캐싱은 「비싼 계산이나 IO 결과를 잠시 저장해 두고 재사용」해 응답 시간·서버 부하를 줄이는 기법입니다.
DB 부하의 80%는 캐싱으로 줄어든다고 할 정도로 영향이 큽니다.
메모이제이션(함수 결과 캐싱).
from functools import lru_cache.
@lru_cache(maxsize=128) def expensive(n): ....
같은 인자면 결과 재사용.
단일 프로세스에서 가장 단순.
단, 프로세스가 죽으면 사라지고 여러 인스턴스 간 공유 안 됨.
Redis — 인메모리 데이터 저장소.
여러 서버가 공유하는 캐시 또는 세션 저장소.
import redis.
r = redis.Redis(host="localhost").
r.set("key", "value", ex=300) — 300초 만료.
r.get("key").
매우 빠름.
캐시 무효화가 가장 어려운 문제.
「데이터가 바뀌면 캐시 비워야 한다」 — 빠뜨리면 오래된 데이터를 보여줌.
패턴: 1) 짧은 TTL로 자연 만료, 2) 데이터 변경 시 명시적 invalidate, 3) write-through(쓰기 시 캐시도 업데이트).
캐시 키 설계.
같은 데이터를 여러 키로 캐시하면 일관성 깨짐.
「엔티티:ID」 패턴(user:123, post:456).
사용자별 데이터는 「user:123:posts:list」처럼 prefix.
키 충돌·낭비 방지에 중요.
한 줄 요약
캐싱은 DB 부하·응답 시간을 크게 줄입니다.
lru_cache는 단일 프로세스용, Redis는 분산 환경.
무효화·키 설계가 가장 어려운 부분입니다.
더 알아볼 것
- Cache-aside vs write-through 패턴
- Redis 데이터 타입 — String·Hash·List
- CDN 캐시도 같은 원리