코알못

5분 안에 구축하는 Ehcache 본문

JAVA

5분 안에 구축하는 Ehcache

코린이s 2020. 11. 28. 18:29
728x90

# 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

 

works-code/ehcache

ehcache를 쉽게 구현 하는 스타터 코드. Contribute to works-code/ehcache development by creating an account on GitHub.

github.com

# 개발 환경

- 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에 대해 캐싱 처리된다.

 

728x90
Comments