Ehcache3 & SpEL

배고픈 징징이 ㅣ 2023. 1. 26. 13:55

SpEl 이란?

Spring Expression Language 의 약자로 스프링에서 지원해주는 표현식이다.

4번에서 사용한다.

종류
설명
예시
#root.methodName
호출되는 메소드의 이름
#root.methodName
#인자의 이름
인자의 값
#param1

 

Cache

Java 메소드에 캐싱을 적용, 같은 인자로 이미 실행을 했던 메소드이면 캐시에 저장된 결과를 반환

메소드의 반복 실행 횟수를 줄여준다.​

입력(혹은 인자)이 같으면 출력(결과)도 같다는 것을 보장하는 메서드에서만 사용

1. 모든 인자를 키로 갖는다.
@Cacheable("TestValue")
public String Test(Test testReq, Boolean isValid)

2. key로 선언된 인자만 키로 갖는다.
@Cacheable(value="TestValue", key="#testReq")
public String Test(Test testReq, Boolean isValid)

@Cacheable(value="TestValue", key="#testReq.seq")
public String Test(Test testReq)

@Cacheable(value="TestValue", key="T(someType).hash(#testReq)")
public String Test(Test testReq)

3. 메소드의 이름 Test를 키로 갖는다.
@Cacheable(value="TestValue", key="#root.methodName")
public String Test(Test testReq, Boolean isValid)

 

0. 의존성 추가 

build.gradle

implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.ehcache:ehcache:3.8.0'
implementation 'javax.cache:cache-api:1.0.0'

 

1. 캐시 정의

  • resources - heap : 사용될 캐시의 저장 크기
  • expiry - ttl : 캐시 만료 시간

ehcache.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.ehcache.org/v3"
        xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
        xsi:schemaLocation="
            http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
            http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
    
    <cache alias="mobileRecommendList">
        <expiry><ttl unit="minutes">10</ttl></expiry>
        <resources><heap unit="entries">4</heap></resources>
    </cache>
</config>

 

2. 프로젝트 설정 파일에 추가 

application.yml

spring.cache.jcache.config=classpath:ehcache.xml

 

3. 캐시 선언 @EnableCaching

@EnableConfigurationProperties
@EnableAsync
@EnableCaching
@EnableScheduling
@SpringBootApplication
public class FrontapiApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(FrontapiApplication.class)
                .listeners(new LoadAdditionalProperties())
                .run(args);
    }
}

 

4. 캐싱 사용 @Cacheable

  • value는 cache의 alias
  • key는 해당 캐시가 저장 되었을때 key가 될 값
    키가 여러개일 때는 "/" 를 사용
@Cacheable(value = "timedealTeaser", key="#request.tz_evt_code")
public List<TimedealTeaser> getTimedealTeaser(TimedealTeaserRequest request) {
	return _timedealMapper.getTimedealTeaser(request);
}

@Cacheable(value = "timedealNormal", key="#request.evt_code + '/' + #request.schedule_idx")
public List<String> getTimedealNormal(TimedealMinimalRequest request) {
	return _timedealMapper.getTimedealNormal(request);
}

 

5. 캐시 제거

  • @Caching(evict={}) 선언 : 한번에 여러개의 캐시를 지우기위해 사용
  • @CacheEvict : 하나의 캐시만 지운다면 더 짧게 사용가능한 어노테이션
  • allEntries : 모든 key의 캐시를 제거
@Caching(evict = {
		@CacheEvict(value = "timedealTeaser", allEntries = true)
		, @CacheEvict(value = "timedealNormal", allEntries = true)
})
public void deleteTimedealCache(){}


@CacheEvict(value = "timedealTeaser", allEntries = true)
public void deleteTimedealTeaserCache(){}

 

반응형

'Java' 카테고리의 다른 글

@pathvariable  (0) 2023.01.26
VO 데이터 추출  (0) 2023.01.26
Reflection  (0) 2023.01.20
@Transactional  (0) 2023.01.19
[안전한 객체 생성법] Builder 패턴 + Assert  (0) 2023.01.19