Cache - Ehcache, Caffeine

by 민갤

Back End /

Ehcache

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에 설정해야하는 번거로움이 있다.

의존성 추가

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이 있다.

의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.1'

References

Ehcache

Caffeine

 Spring - Ehcache

EHCache 설정방법 (Spring Boot) | Carrey`s 기술블로그

스프링부트 Caching 도입하기(Redis, Ehcache)

[Spring] ehCache2와 달라진 ehCache3 사용

Caffeine Cache, 어렵지 않게 사용하기 1

Introduction to caffeine caching core principles

TinyLFU: A Highly Efficient Cache Admission Policy

Ehcache vs Caffeine Cache

Spring boot 에 caffeine cache 적용하기

Author

민갤

민갤

Back-End Developer

꾸잉꾸잉하고 웁니다.

로그인

디코에 오신 것을 환영해요!
전문가들의 수많은 아티클 창고 🤓