cache?
자주 사용하는 데이터를 저장해서 재활용하는 기술
cache Abstraction(캐시 추상화)
- 스프링의 캐시 추상화는 캐시 특정 기술에 종속되지 않고, AOP를 통해 적용
- 애플리케이션 코드를 수정하지 않고 캐시 부가기능을 추가할 수 있다.
- 즉 , 캐시 API를 코드에 추가하지 않고 쉽게 캐시 기능을 부여
cache Manager
- 스프링에서 캐시 추상화를 하기 위해서는 캐시 기술을 지원하는 **캐시 매니저**를 빈으로 등록해야 한다.
- ConcurrentMapCacheManager
- java.util.concurrent.ConcurrentMap - 캐시 기능을 구현하는 간단한 캐시 매니저
- CaffeineCacheManager
- Java 9로 Guava 캐시를 재작성한 Caffeine 캐시를 사용하는 캐시 매니저
- EhCacheCacheManager 와 함께 자주 사용하는 캐시 매니저
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
</dependencies>
@EnableCaching
Element | Description | Type |
---|---|---|
cacheName | 캐시 이름 | String[] |
value | cacheName의 alias | String[] |
key | * 동적인 key 값을 사용하는 spEL(spring Expression Language) 표현식 | |
* 동일한 cach를 사용하지만 구분될 필요가 있는 경우 사용하는 값 | String | |
condition | SpEL 표현식이 참일 경우 캐싱 적용 | |
-or, and 등 조건식, 논리연산 가능 | String | |
unless | 캐싱을 막기 위해 사용되는 SpEL 표현식 | |
거짓일 경우 캐싱이 적용 | String | |
cacheManager | 사용할 CacheManager 지정 | String |
sync | 캐시 구현체가 Thrread safe하지 않은 경우, 캐시에 동기화를 걸 수 있는 속성 | boolean |
@CacheEvict
메서드가 호출될 시, 지정된 캐시를 삭제
select 이외에 insert,update,delete를 해주어야 할 경우, 기존 캐싱 데이터를 변경해주어야 하기 때문에 삭제 작업이 필요하다.
@CachePut
캐시 값을 저장하는 용도로만 사용
조회 시에 저장된 캐시의 내용을 사용하지 않고, 메소드의 로직을 실행
@Caching
하나의 메서드를 호출할 때, Cacheable,CacheEvict 등 여러 개의 캐싱 동작을 수행
Element | Description | Type |
---|---|---|
cacheable | 적용 될 @Cacheable array를 등록 | Cacheable[] |
evict | 적용 될 @CacheEvict array를 등록 | CacheEvict[] |
put | 적용 될 @Cacheput array를 등록 | CachePut[] |
@CacheConfig
클래스 단위로 캐시 설정을 동일하게 하고 싶을 때 사용