로컬 캐시중의 하나인 caffeine cache 적용 한 sample project.
기능 | Ehcache | Caffeine |
---|---|---|
캐시 적중률 | 평균 수준 | 매우 높음 (W-TinyLFU 알고리즘) |
디스크 기반 캐싱 | 지원 | 지원하지 않음 (메모리 캐싱 전용) |
비동기 로딩 | 제한적 지원 | 완전한 지원 |
사용자 정의 만료 정책 | 제한적 | 고급 만료 정책 지원 |
통합성 (Spring 등) | 잘 통합됨 | Spring Boot와 완벽 통합 |
GC 성능 | 객체 참조를 계속 유지 | 객체 약한 참조 사용, GC 부담 적음 |
-
Ehcache:
- 단순한 만료 정책(예: Time-to-Live, Time-to-Idle)을 지원.
- 사용자 정의 만료 정책 구현이 어렵고 복잡.
-
Caffeine:
- 시간 기반 만료(Time-based eviction), 크기 기반 만료(Size-based eviction)를 기본 제공.
- 액세스 빈도와 재참조를 고려한 고급 만료 정책 지원.
- 디스크 기반 캐싱을 지원하여 영속성이 필요한 애플리케이션에 적합.
- 오래된 레거시 시스템과의 호환성.
- W-TinyLFU 알고리즘으로 캐시 적중률 극대화.
- 최신 JVM 아키텍처 최적화.
- Spring Boot와의 통합이 간단하며, 설정과 사용법이 직관적.
- 성능 최적화가 필요한 API 서비스에 적합.
-
기능:
- 메서드 실행 결과를 캐시에 저장.
- 동일한 입력값으로 호출 시, 캐시에 저장된 값을 반환하여 메서드 실행을 방지.
-
사용 예:
@Cacheable(value = "books", key = "#isbn") public Book getBookByIsbn(String isbn) { return bookRepository.findByIsbn(isbn); }
-
기능:
- 캐시를 무효화하거나 제거.
- 데이터가 변경되었을 때, 캐시를 갱신하여 최신 상태를 유지.
-
사용 예:
@CacheEvict(value = "books", key = "#isbn") public void updateBook(String isbn, Book updatedBook) { bookRepository.save(updatedBook); }
LIRS (Low Inter-reference Recency Set), LRU 등의 알고리즘보다 효율적.