다른 저장소에도 저장이 가능하다
Local Caching vs Global Caching
- Local Cache
- 로컬캐시는 로컬 서버 내부 저장소에 데이터를 보관한다.
- 서버에서 데이터에 바로 접근할 수 있기 때문에 속도가 빠르다는 장점이 있지만, 다중 서버 환경에서는 각 서버에 중복된 데이터를 보관해야 하며 서버간 데이터 일관성이 깨질수 있다
- Global Cache
- 글로벌캐시는 서버와 분리된 별도의 저장소에 데이터를 보관하는 것이다
- 네트워크를 타기 때문에 로컬캐시에 비해 속도가 느리지만 중복 데이터 및 데이터 일관성 문제가 없다는 장점이 있다.
CacheManager 종류
- ConcurrentMapCacheManager:
- ConcurrentHashMap을 캐시 저장소로 사용할 수 있는 구현체다.
- 캐시 정보를 Map 타입으로 메모리에 저장해두기 때문에 빠르고 별다른 설정이 필요 없다는 장점이 있지만, 실제 서비스에서 사용하기엔 기능이 빈약하다.
- SimpleCacheManager
- 기본적으로 제공하는 캐시가 없다
- 사용할 캐시를 직접 등록하여 사용하기 위한 캐시 매니저 구현체다.
- EhCacheCacheManager
- Java에서 유명한 캐시 프레임워크 중 하나인 EhCache를 지원하는 캐시 매니저 구현체다.
- CaffeineCacheManager
- Java 8로 Guava 캐시를 재작성한 Caffeine 캐시 저장소를 사용할 수 있는 구현체다.
- EhCache와 함께 인기 있는 매니저인데, 더 좋은 성능을 갖는다고 한다.
- RedisCacheManager
- Redis를 캐시 저장소로 사용할 수 있는 구현체다.
- CompositeCacheManager
- 한 개 이상의 캐시 매니저를 사용할 수 있는 혼합 캐시 매니저다.
- 더 다양한 캐시 매니저가 있으니 잘 찾아보자
캐시 활성화를 위한 어노테이션이다클래스 단위로 사용하고 관리하기 위한 어노테이션이다저장하거나 조회 해오는 기능을 수행하는 어노테이션이다저장하며 존재 시 갱신하는 기능을 수행하는 어노테이션이다삭제하는 기능을 수행하는 어노테이션이다함께 사용할 때 사용하는 어노테이션이다주요 애노테이션 비교
- Cacheable
- 캐시 조회, 저장 기능
- 캐시 존재 시 메서드 호출 전 실행
- 캐시 미 존재 시 메서드 호출 후 실행
- CachePut
- 캐시 저장 기능
- 캐시 존재 시 메서드 호출 후 실행
- 캐시 미 존재 시 메서드 호출 후 실행
- CacheEvict
- 캐시 삭제 기능
- beforeInvocation 속성값이 true일때 메서드 호출 전 실행
- beforeInvocation 속성값이 false일때 메서드 호출 후 실행
- 메서드 호출 전이라는 건 캐시가 있는 경우 메서드를 호출하지 않고 캐시에서 가져온다는 뜻이고 호출 후는 메서드를 호출하여 데이터를 생성한 후, 생성된 데이터를 캐시에 저장한다
참고) https://adjh54.tistory.com/165
https://velog.io/@songs4805/Spring-Cache%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://velog.io/@taebong98/Spring-Cache-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://mangkyu.tistory.com/370