일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 젠킨스
- SpringBoot
- 로그인
- 레디스
- 설정
- fastcampus
- 예제
- EMR
- config
- gradle
- Docker
- 간단
- 자바
- Kafka
- 머신러닝
- spring
- aws
- Mac
- Cluster
- ec2
- Zeppelin
- java
- 클러스터
- vue
- login
- redash
- Jenkins
- Redis
- 자동
- hive
- Today
- Total
코알못
5분 안에 구축하는 Ehcache 본문
# Ehcache 란?
- 캐시 시스템
- 많은 업데이트가 필요없는 데이터를 메모리에 캐싱하여 서버요청 없이 데이터를 로딩하여, 서버 부담을 줄어주고 빠른 응답을 제공
- spring 에서 제공 하고 있어 빠른 캐싱 시스템 구축 가능
# 어노테이션
- @EnableCaching
// EnableCaching : 캐싱을 사용하겠다는 의미
@EnableCaching
@SpringBootApplication
public class EhcacheApplication {
public static void main(String[] args) {
SpringApplication.run(EhcacheApplication.class, args);
}
}
- @Cacheable
- 해당 키값이 존재할 경우, 메서드 수행하지 않고 키에 매핑된 값을 리턴
- 해당 키값이 존재하지 않는 경우, 수행하여 retuen 값 해당 key값으로 캐싱
- 속성
1. cacheName : 캐시명
2. key : 캐시를 저장할 키
3. condition : 해당 조건에 맞으면 캐싱을 한다.
@Cacheable(cacheNames = "codeCache", key = "#key", condition = "#key != '' ")
public String addCache(String key, String context){
log.error("### cache add {} -> {}", key, context);
return context;
}
- @CacheEvict
- key에 해당하는 캐시만 제거
- 속성 위와 동일
// key에 해당하는 캐시만 제거
@CacheEvict(cacheNames = "codeCache", key = "#key")
public void deleteCache(String key){
log.error("### cache delete -> {}",key);
}
// 모든 캐시 제거
@CacheEvict(cacheNames = "codeCache", allEntries = true)
public void deleteAllCache(){
log.error("### all cache delete");
}
- @CachePut
- 무조건 캐시 등록
@CachePut(cacheNames = "codeCache", key = "#key", condition = "#key != '' ")
public String updateCache(String key, String context){
log.error("### cache add {} -> {}", key, context);
return context;
}
- 전체 예제 코드
:: github.com/works-code/ehcache
# 개발 환경
- mac os catalina
- java 15
- spring boot 2.4.0
- gradle 6.6.1
# API 설명 ( /cache)
- 파라미터
1. cacheMode : 캐시 모드
-> add : 캐싱이 안되어 있다면 캐싱, 캐싱이 되어 있다면 캐싱을 하지 않는다.
-> update : 캐싱을 무조건 한다.
-> delete : 해당하는 키만 캐싱을 제거한다.
-> alldelete : 모든 캐싱을 제거한다.
2. key : 캐싱 메세지의 키값
- 키값에 따라 캐싱을 하므로 유니크 하다.
3. context : 캐싱 데이터
- 응답
1. 캐싱된 데이터 리턴
2. 캐싱 메소드가 실행 됐다면 로그를 남긴다.
# 결과
1. 캐시 등록 (@Cacheable)
- response : 두개 모두 캐싱 처리가 됨
2020-11-28 18:29:50.990 INFO 2575 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
2020-11-28 18:29:51.038 ERROR 2575 --- [nio-8088-exec-2] com.code.service.Ehcache : ### cache add 1 -> 코알못1
2020-11-28 18:35:58.628 ERROR 2575 --- [nio-8088-exec-5] com.code.service.Ehcache : ### cache add 2 -> 코알못2
2. 등록된 캐싱 데이터 변경 요청 (@Cacheable)
- response : 로그가 남지 않으며, 기존에 캐싱된 데이터가 응답으로 나간다.
3 캐시 변경 (@CachePut)
- response : 로그가 남으며, 캐싱이 변경되어 나간다.
2020-11-28 18:29:50.990 INFO 2575 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
2020-11-28 18:29:51.038 ERROR 2575 --- [nio-8088-exec-2] com.code.service.Ehcache : ### cache add 1 -> 코알못1
2020-11-28 18:35:58.628 ERROR 2575 --- [nio-8088-exec-5] com.code.service.Ehcache : ### cache add 2 -> 코알못2
2020-11-28 18:39:04.887 ERROR 2575 --- [nio-8088-exec-3] com.code.service.Ehcache : ### cache add 1 -> 코알못2
4. 캐싱 일부 제거 (@CacheEvict :: key = "#key")
- response : 1 번 key 데이터를 지움.
2020-11-28 18:29:50.990 INFO 2575 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
2020-11-28 18:29:51.038 ERROR 2575 --- [nio-8088-exec-2] com.code.service.Ehcache : ### cache add 1 -> 코알못1
2020-11-28 18:35:58.628 ERROR 2575 --- [nio-8088-exec-5] com.code.service.Ehcache : ### cache add 2 -> 코알못2
2020-11-28 18:39:04.887 ERROR 2575 --- [nio-8088-exec-3] com.code.service.Ehcache : ### cache add 1 -> 코알못2
2020-11-28 18:41:12.032 ERROR 2575 --- [nio-8088-exec-6] com.code.service.Ehcache : ### cache delete -> 1
- 확인
> 1번은 지웠으니, key에 대해서 변경이 성공적으로 되었고 (정상)
> 2번은 안지웠으니, key에 대해서 변경이 안된다. (정상)
5. 캐시 모두 제거(@CacheEvict :: allEntries = true)
- response
2020-11-28 18:45:24.880 ERROR 2575 --- [nio-8088-exec-3] com.code.service.Ehcache : ### all cache delete
- 확인
> 모든 캐싱을 지워서, 모든 key에 대해 캐싱 처리된다.
'JAVA' 카테고리의 다른 글
5분 안에 구축하는 Redis(레디스) (1) | 2021.02.15 |
---|---|
[에러] NoClassDefFoundError: com/fasterxml/jackson/databind/JsonSerializer (0) | 2021.02.15 |
5분 안에 구축하는 Quartz 동적 스케쥴링 (4) | 2021.01.30 |
[설치/설정] 5분 안에 설정 하는 Mac에 자바 여러 버전 설치/설정 (3) | 2021.01.30 |
5분 안에 구축하는 Rabbitmq (0) | 2020.11.28 |