Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Spring Boot
- MariaDB
- orioledb
- 서브라임 텍스트
- Next.js
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- JSP
- Windows 10
- Java
- BRIN
- NextJs
- typeorm
- tomcat
- graph database
- tortoise SVN
- maven
- HTML Code
- Spring
- Maven Project
- OGM
- springboot
- Spring Cloud
- loadcomplete
- HTML Special Entity
- exit code = -805306369
- Eclipse
- NestJS
- PG-Strom
- PostgreSQL
- STS
Archives
- Today
- Total
Undergoing
Spring Boot Caffeine 기본 세팅 본문
1. 의존성 추가
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.0.2</version>
</dependency>
gradle
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.4.3'
implementation group: 'com.github.ben-manes.caffeine', name: 'caffeine', version: '3.0.2'
2. Bean 세팅
@Configuration
@EnableCaching
public class CacheConfig {
private static final int DEFAULT_MAXSIZE = 1000;
private static final int DEFAULT_TTL = 3600;
@Bean
public CacheManager cacheManager() {
SimpleCacheManager manager = new SimpleCacheManager();
ArrayList<CaffeineCache> caches = new ArrayList<>();
for (Caches c : Caches.values()) {
caches.add(new CaffeineCache(c.name(),
Caffeine.newBuilder().recordStats().expireAfterAccess(c.getTtl(), TimeUnit.SECONDS)
.expireAfterWrite(c.getTtl(), TimeUnit.SECONDS)
.maximumSize(c.getMaxSize()) // entry 갯수
.build())
);
}
manager.setCaches(caches);
return manager;
}
public enum Caches {
tempCache(30) // 사용할 캐시들 입력
, tempCache1(40) // Example : cacheName(TTL, maxSize)
, ...;
private int maxSize = DEFAULT_MAXSIZE;
private int ttl = DEFAULT_TTL;
Caches() {
}
Caches(int ttl) {
this.ttl = ttl;
}
Caches(int ttl, int maxSize) {
this.ttl = ttl;
this.maxSize = maxSize;
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int getTtl() {
return ttl;
}
public void setTtl(int ttl) {
this.ttl = ttl;
}
}
}
3. application.yml 세팅
- bean 만들면 application.yml에 굳이 세팅 필요없는 것 같음. 사실 yaml 활용하고 싶었지만 레퍼런스들 참고하다가 나온 최종 상태가 결국 클래스 파일 하나를 두어 관리하게 되어 버림
- 세팅 시 다음과 같은 형식으로 기본 옵션 정도는 처리 가능
spring:
cache:
caffeine:
spec: maximumSize=500,expireAfterAccess=20s
type: caffeine
cache-names:
- testCache
- testCache1
* 구현할 때에는 뭐든지 상관없지만, 코드화해서 관리하는 걸 권장함
https://programmersought.com/article/66363628633/
4. usage
// value = cache 저장소, key = 저장소 key값
@Cacheable(value = "tempCache", key = "'tempCache'.concat(#usrId)")
public List testList(String usrId){
...
}
고려 사항
- 여러 개의 캐시 및 키 관리법 중 뭐가 나을까
https://github.com/spring-projects/spring-framework/issues/15586
- 찾아보니 여러 방법으로 Caffeine(등 여러 Cache 기법)을 구축하는데 하다 보니 config class를 따로 만들었는데, 좀 더 생산적인 방법이 있을까
- cache만 모아두고 만료시간 전에 캐시값 변조 후 재적재가 가능할까, 그 과정이 필요할까
'개발 > Spring Boot' 카테고리의 다른 글
Spring Boot가 지원하는 cache 기법(공식 문서 기준) (0) | 2021.06.22 |
---|---|
[Springboot] Cannot determine embedded database driver class for database type NONE (0) | 2018.02.07 |