Cache - Ehcache, Caffeine
ServerEhcache
Java 기반 오픈 소스 Cache 라이브러리
javax.cache API(JSR-107 JCache) 지원 (v3 부터)
- JCache(Java Temporary Caching API): Java에서 제공하는 표준 Caching API
Terracotta를 사용한 분산 캐싱 지원
저장 방식: Heap Memory 추천
- In-Memory: JVM 힙 메모리. (DEPRECATED)
- OffHeap: JVM 힙 메모리 외부에 있는 메모리. Java GC에 의해 데이터가 정리되지 않는 공간
- Local Disk
메모리 공간이 가득차면 삭제 알고리즘에 따라 제거한다.
- LRU(Least Recent Used)
- LFU (Least Frequency Used)
- FIFO(First In First Out)
캐시마다 XML에 설정해야하는 번거로움이 있다.
의존성 추가
yml
implementation("org.springframework.boot:spring-boot-starter-cache")
implementation("org.ehcache:ehcache:3.10.6")
Caffeine
GitHub에서 거의 최적의 적중률을 제공하는 고성능 Java 캐싱 라이브러리라고 소개하고 있다.
In-Memory 기반이며, 스레드 안전(Thread safety)하다.
제거 전략으로 크기 기반, 시간 기반, 참조 기반이 있다.
W-TinyLFU(Window-TinyLfu) 알고리즘을 사용한다.
- LRU와 LFU의 장점을 통합하고 LRU와 LFU의 단점을 적절히 개선한 알고리즘
- 캐시 저장 공간을 Window Cache(1%)와 Main Cache(99%)로 나눈다.
- Window Cache: LRU 제거 정책
- 새로운 데이터가 가장 처음 저장되는 공간
- 공간이 가득차면 오래된 캐시는 LRU 방식에 따라 Main Cache로 이동한다.
- Main Cache: SLRU(Segmemted LRU) 제거 정책
- Probation Cache (20%): 한 번만 사용된 데이터를 저장한다.
- 일정 기간 내에 재사용 되면 Protected Cache로 이동한다.
- Protected Cache (80%): 자주 사용되는 데이터를 저장한다.
- 오래된 캐시는 TinyLFU 알고리즘에 의해 제거되거나 Probation Cache로 이동한다.
JSR-107 JCache와 Guava를 지원한다.
적용 방법으로 XML과 Configuration이 있다.
의존성 추가
yml
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.1'
References
EHCache 설정방법 (Spring Boot) | Carrey`s 기술블로그
스프링부트 Caching 도입하기(Redis, Ehcache)
[Spring] ehCache2와 달라진 ehCache3 사용
Introduction to caffeine caching core principles