스프링부트에서 간단하게 사용할 수 있는 캐시 사용법입니다.
서비스 레이어에서 예를 들어 아래와 같은 코드를 사용할 수 있습니다.
@Cacheable 어노테이션을 통해 캐시할 대상을 지정하고 value는 어떤 캐시정책을 쓸 것인가에 대한 값이고 key는 지정한 캐시 정책내애서 캐시를 구분해주는 키값 입니다.
@CacheEvict 어노테이션은 value로 매칭되는 @Cacheable에 캐시되었던 데이터를 지워줄 대상을 지정합니다.
마찬가지로 key는 해당 캐시정책에서 특정 키에 해당하는 데이터만 지웁니다.
혹은 여러 캐시를 모두 지우고 싶은 경우 마지막 메서드처럼 하면 됩니다.
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; @Cacheable(value = "user", key = "#root.methodName + #userId") public String getUser(String userId, PrettyLog prettyLog) { return userDao.selectOne(userId, prettyLog); } @CacheEvict(value = "user", key = "#root.methodName + #userId") public void clearCacheUser(String userId, PrettyLog prettyLog) { } @Caching(evict = { // @CacheEvict(value = "user", allEntries = true), // @CacheEvict(value = "common", allEntries = true)// }) public void clearCacheUser(PrettyLog prettyLog) { } |
스프링부트에서 위 소스를 동작하게하려면 @EnableCaching 을 메인에서 지정해줘야 합니다.
import org.springframework.boot.SpringApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @EnableCaching public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } |
ehcache.xml 파일입니다. (기본은 클래스패스 최상위에두면 자동으로 인식합니다.)
캐시정책을 정의합니다. 서비스레이어에서 value 해당하는 값이 아래의 cache name에 매칭됩니다.
timeToIdleSeconds : 몇초동안사용되지않으면 지울지
timeToLiveSeconds : 몇초동안만 살아있을지
maxBytesLocalHeap : 최대 메모리 사이즈
eternal : true면 timeout 관련설정을 무시하고 캐시를 지우지않는다.
2.5.2 에서 Deprecate 되었다.
maxElmentsInMemory : 메모리에 저장할 최대 개수
2.5.2 이후 2.x 버전
maxEntriesLocalHeap
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <diskStore path="java.io.tmpdir" /> <defaultCache maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> <cache name="user" maxEntriesLocalHeap="1000" maxBytesLocalHeap="100m" eternal="false" timeToIdleSeconds="360" timeToLiveSeconds="" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" /> </ehcache> |
마지막으로 캐시를 사용하기위한 메이븐 설정입니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache.internal</groupId> <artifactId>ehcache-core</artifactId> <version>2.10.1</version> <scope>provided</scope> </dependency> |
'java' 카테고리의 다른 글
spring boot - spring.log 남기지 않기. (0) | 2018.02.21 |
---|---|
java poi excel write 엑셀 쓰기 (0) | 2018.01.29 |
java 전화번호 형식 변환 (7) | 2018.01.23 |
spring security cache control (0) | 2018.01.16 |
spring 301 redirect - RedirectView (0) | 2018.01.09 |
java md5 (0) | 2017.12.26 |
LRU LFU FIFO 알고리즘 (0) | 2017.12.19 |
java - collections sort (0) | 2017.12.06 |