티스토리 뷰
Spring Boot에 Cache넣기
spring-boot-starter-cache만 import 하면 ConcurrentHashMap이 캐시 클래스가 된다.
이 클래스는 expire를 수동으로 해줘야 한다.
그래서 expire time을 줄 수 있는 caffein cache를 쓰는 것.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.6.2</version>
</dependency>
main(){
@SpringBootApplication
@EnableCaching
public class ChartDataServer extends SpringBootServletInitializer {}
CacheType.java
import lombok.Getter;
@Getter
public enum CacheType {
GET_STUDENT("get_students_with_task", 5, 10000),
COURSE_STUDENT("course_student", 5 * 60, 10000),
ARTIST_INFO("artistInfo", 24 * 60 * 60, 10000);
CacheType(String cacheName, int expiredAfterWrite, int maximumSize) {
this.cacheName = cacheName;
this.expiredAfterWrite = expiredAfterWrite;
this.maximumSize = maximumSize;
}
private String cacheName;
private int expiredAfterWrite;
private int maximumSize;
}
CacheConfig.java
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<CaffeineCache> caches = Arrays.stream(CacheType.values())
.map(cache -> new CaffeineCache(cache.getCacheName(), Caffeine.newBuilder().recordStats()
.expireAfterWrite(cache.getExpiredAfterWrite(), TimeUnit.SECONDS)
.maximumSize(cache.getMaximumSize())
.build()
)
)
.collect(Collectors.toList());
cacheManager.setCaches(caches);
return cacheManager;
}
}
어노테이션 달기
해당 method에 @Cacheable추가 하면 됩니다.
메소드로 넘어오는 파라메터에 맞게 잘 달아 주어야 합니다.
@Cacheable(value = "get_course_student", key = "#todayCourseInfo.id + '_' + #todayCourseInfo.week + '_' + #todayCourseInfo.dayOfWeek + '_' + #repoName")
public CourseStudent getCourseStudent(TodayCourseInfo todayCourseInfo, String repoName, String userName) {
Dto기반 캐싱
파라메터가 DTO인데 Dto의 멤버변수를 이용해 캐싱 하고 싶다면 다음과 같이 #dto.idCompany 등을 쓰면 됩니다.
@Cacheable(value = "kpi", key = "#dto.idCompany + '-' + #dto.factoryId.orElse('')")
public Kpi kpi(KpiRequestDto dto) {
cache가 적용 되었는지 보기 위해 로그 설정하기
application.yml
logging:
level:
org:
hibernate:
SQL: DEBUG
type.descriptor.sql.BasicBinder: DEBUG
참고
Spring boot 에 caffeine 캐시를 적용해보자 - 어떻게하면 일을 안 할까? (yevgnenll.me)
728x90
'Spring > Spring Boot(스프링 부트)' 카테고리의 다른 글
WebFlux test get, get with param, post, post with param (0) | 2019.01.18 |
---|---|
Optional .orElseThrow(Function) 사용법 (0) | 2019.01.10 |
jpa에서 복수키 만들기(key 2개), 복수키를 사용할 경우 길이 문제 (0) | 2019.01.08 |
jpa 강좌 주제 (0) | 2019.01.08 |
Spring Data Jpa - mysql LocalDateTime은 timestamp로, BigDecimal은 decimal mapping하기 (0) | 2019.01.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 2017 티스토리 결산
- 도커각티슈케이스
- docker container tissue box
- 개발자
- vim
- shellscript
- docker container
- 이직
- 도커티슈박스
- docker container whale
- 싱가폴
- 도커티슈케이스
- Linux
- Sh
- docker container case
- docker container tissue
- 도커컨테이너
- 도커각티슈박스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함