TIL

220808 // 스프링에서 cache에 대하여

하얀잔디 2022. 8. 8. 15:19

캐시/ 예외처리 

 

Local Cache:

서버 내부에 캐시를 저장함.
다른 서버의 캐시 참조 어려움
속도 빠름
서버의 메모리/디스크를 사용함

Global Cache:
여러 서버에서 캐시 서버에 접근.
네트워크 트래픽이므로 캐시보단 느림

모놀리틱 아키텍쳐: 하나에다 박는것


스프링에서 캐시 : 
  --> 반복적으로 결과물 반환할때는 캐시처리가 좋음!

캐시 쓸땐 클래스 앞에

 @EnableCaching 선언

ex)


 @EnableCaching
 @Configuration
 public class CacheConfig(){

     @Bean
     public CacheManager cacheManager(){
         SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
         simpleCacheManager.setCaches(List.of(new ConcurrentMapCache("캐시이름")));
         return simpleCacheManager;            

     }
 }

1. SimpleCacheManager  :  구현체인 캐시가 없는 깡통 매니저.
setCaches 함수를 통해 구현체를 넘겨서 사용 가능함.

2.ConcurrentMapCacheManager :  Map타입으로 빠르지만 용량제한 및 다양한 기능 없어서 테스트용도임

 

3.EhCacheCacheMangager : 자바에서 가장 인기있는 캐시 프레임워크인 EhCache 지원하는 캐시 매니저임.

 

-- EhCacheManager 사용법:

 

 1) 캐시 매니저 등록  :  구글에 CacheConfig 검색하기

 

 2)  캐시 적용방법:

 

@Cacheable(value = "layoutRecentArticleCaching", key = "#lastArticleId")
public List<Article> getRecentArticles(Long lastArticleId) {
....중략...
}

이런식으로 위에 @Cacheable을 달면 됨.

value : 해당 반환값 저장하는 캐시 저장소의 이름임.

key : 캐시는 MAP 구조로 저장됨. 따라서 저장할 키 값을 지정하고 반환값은 밸류값임.

condition : 파라미터 값이 특정 조건일 경우만 캐시 적용할 경우 사용하면 됨.

 

3) 캐시 해제 방법

 

캐시는 적절하게 제거되어야 하기 때문에

@CacheEvict 에노테이션이 제공됨.

 @CacheEvict(value = {"layoutCaching", "layoutRecentArticleCaching","seoCaching"}, allEntries = true)
  public void editArticle(Long articleId, ArticleForm articleForm) {
        ...중략...
  } 

왜 사용??  :  데이터의 정합성을 유지할 수 있음.

 

value 에 있는 배열의 모든 데이터를 초기화 한다는 뜻임.

 

'TIL' 카테고리의 다른 글

220816 자바에서의 문자열  (0) 2022.08.16
220812 자바객체복사. JoinTable. findById 의 작동원리 등  (0) 2022.08.12
220811  (0) 2022.08.11
220810 TIL  (0) 2022.08.10
220808 // Kafka란?  (0) 2022.08.08