ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Spring Cache란
    카테고리 없음 2024. 6. 24. 01:05

    자주 사용되는 데이터를 매번 요청할 때마다 생성하여 응답하는 것보다는 생성된 데이터를 저장해 놓고 똑같은 요청이 왔을 때 로직을 거치지 않고 데이터를 반환해 주어 빠른 검색을 가능하게 하는 기능을 제공한다.

     

    사용해야 하는 곳

    • 클라이언트에게 전달되는 값이 동일할 때
    • 빈번하게 호출될 때
    • 한 번 처리할 때 많은 서버 리소스를 요구할 때

     

    사용하지 말아야 할 곳

    • 실시간으로 정확성을 요구하는 경우
    • 빈번하게 데이터 변경이 일어나는 경우

     

    설정

    implementation 'org.springframework.boot:spring-boot-starter-cache

     

    어노테이션

    어노테이션 설명
    @EnableCache Spring Boot Cache를 사용하기 위해 ‘캐시 활성화’를 위한 어노테이션
    @CacheConfig 캐시 정보를 ‘클래스 단위’로 사용하고 관리하기 위한 어노테이션
    @Cacheable 캐시 정보를 메모리 상에 ‘저장’하거나 ‘조회’해오는 기능을 수행하는 어노테이션
    @CachePut 캐시 정보를 메모리상에 ‘저장’하며 존재 시 갱신을 수행하는 어노테이션
    @CacheEvict 캐시 정보를 메모리상에 ‘삭제’하는 기능을 수행하는 어노테이션
    @Caching 여러 개의 ‘캐시 어노테이션’을 함께 사용할 때 사용하는 어노테이션

     

    @Cacheable, @CachePut, @CacheEvict

    @Cacheable(cacheNames = "memberCache", key = "#key")
    public Member getCacheData(final String key) {
    	log.info("해당 key에 대한 캐시가 없는 경우 로그가 찍힌다.");
    	return Member;
    }
    
    @CachePut(cacheNames = "memberCache", key = "#key")
    public Member updateCacheData(final String key, final String value) {
    	log.info("해당 key에 대한 캐시가 없데이트 되는 경우 로그가 찍힌다.");
    	Member member = new Member();
    	member.setValue(value);
    	member.setExpirationDate(LocalDateTime.now().plusDays(1));
    	return member;
    }
    
    @CacheEvict(cacheNames = "memberCache", key = "#key")
    public boolean expireCacheData(final String key) {
    	log.info("해당 key에 대한 캐시를 지울 경우 로그가 찍힌다.");
    	return true;
    }

     

    @Cacheable(cacheNames = "memberCache", key = "#key")
    

    해당 key에 대한 데이터가 존재한다면 getCacheData가 실행되지 않고 기존 데이터가 return 된다. 메서드가 실행되지 않기 때문에 로그도 찍히지 않는다.

     

     

      @Cacheable("memberCacheStore")
      public Member cacheable(String date) {
        log.info("cache 저장");
        return member;
      }
    
      @Cacheable(value = "memberCacheStore", key = "#member.name")
      public Member cacheableByKey(Member member) {
    		log.info("cache 저장(key 지정)");
        return member;
      }
    
      @Cacheable(value = "memberCacheStore", key = "#member.name", condition = "#member.name.length() > 5")
      public Member cacheableWithCondition(Member member) {
    		log.info("조건부 cache 저장");
        return member;
      }
    • spEL(Spring Expression Language) 문법을 사용하여 String , Integer, Long 같은 값은 #변수명 형태로 사용되고, 객체 안에 멤버 변수를 비교하는 경우에는 #객체명.멤버명 형태로 사용한다.

    @CachePut VS @Cacheable

    @CachePut과 @Cacheable은 유사하게 실행 결과를 캐시에 저장하지만, @Cacheable은 캐시 정보를 조회하는 데 주로 사용되고 @CachePut은 캐시 정보를 저장하는데 주로 사용된다.

    • @CachePut은 무조건 메서드를 실행하게 되고, @Cacheable은 캐시 데이터가 없는 경우에만 실행하게 된다.

     

    댓글

Designed by Tistory.