Q3. 시간 기준 만료가 정합성에 중요한가? (예: 1분 stale OK, 그 이상 안 됨)
예 → TTL + LRU/LFU 조합 (Redis 기본 패턴)
Q4. 매우 단순한 캐시면 충분하고 구현 비용 최소화?
예 → FIFO 또는 Random (의외로 큰 사이즈에선 LRU와 차이 작음)
Q5. 현대 JVM 앱에서 별다른 제약 없이 기본 선택?
→ W-TinyLFU (Caffeine) — 적중률·pollution 저항 다 좋음. 사실상 새 표준.
⑤ 실전 설정 — Redis & Caffeine
Redis (maxmemory-policy)
maxmemory 2gb
maxmemory-policy allkeys-lru # 모든 키 대상 LRU (가장 흔함)
# 또는
maxmemory-policy allkeys-lfu # LFU
maxmemory-policy volatile-ttl # TTL 있는 키 중 만료 임박 우선
maxmemory-policy volatile-lru # TTL 있는 키만 LRU 적용
maxmemory-policy noeviction # 가득 차면 새 쓰기 거부 (안전 우선)
→ 일반 캐시: allkeys-lru. 인기 보존 중요: allkeys-lfu. 정합성 절대: noeviction + 알람.
Caffeine (Java/Kotlin, 기본 W-TinyLFU)
val cache: Cache<Long, Product> = Caffeine.newBuilder()
.maximumSize(10_000) // W-TinyLFU 자동 적용
.expireAfterWrite(Duration.ofMinutes(10)) // TTL 조합
.recordStats() // hit율 측정 ⭐
.build()
// 모니터링
cache.stats().hitRate() // 0.0 ~ 1.0
cache.stats().evictionCount() // 누적 축출 수
→ recordStats()로 hit율·축출 수를 꾸준히 모니터링 권장.
출처: study/cache/cache.md §6 · 함께 보기: cache-visual.html (전체 한 페이지 정리)