SpringBoot는 Spring의 AOP 기술을 기반으로 주석 수준에서 데이터 캐싱 기능을 구현합니다. 모든 캐시 구성은 선언 트랜잭션과 같이 주석 수준에서만 구성됩니다.
Spring은 Cachemanager 및 Cache 인터페이스를 정의하여 다양한 캐싱 기술을 통합합니다. 그 중 Cachemanager는 Spring에서 제공하는 다양한 캐싱 기술에 대한 추상 인터페이스입니다. 캐시 인터페이스에는 다양한 캐시 작업이 포함되어 있습니다.
Cachemanger
다른 캐시 기술의 경우 다양한 캐시 메나기를 구현해야합니다. Spring은 다음 Cachemanger 구현을 정의합니다.
| Cachemanger | 설명하다 |
|---|---|
| SimplecCachemanager | 간단한 컬렉션을 사용하여 주로 테스트를 위해 캐시를 저장하십시오 |
| ConcurrentMapCacheManager | ConcurrentMap을 캐시 기술로 사용하십시오 (기본값) |
| NoopCachemanager | 테스트 용 |
| ehcachecachemanager | ehcache는 캐시 기술로 사용되며 최대 절전 모드에서 자주 사용되었습니다. |
| guavacachemanager | Goovacache는 캐싱 기술로 Google Guava를 사용합니다 |
| HazelcastCacheManager | Hazelcast를 캐싱 기술로 사용합니다 |
| JCACHECCACHEMANAGER | Apache Commons JCS와 같은 캐싱 기술과 같은 Jcache Standard를 사용한 구현 |
| readiscachemanager | 캐싱 기술로 Redis를 사용합니다 |
일반 SpringBoot는 Ehcache, Collection, Guava, ConcurrentMap 및 기타 캐시를 자동으로 구성하여 기본적으로 ConcurrentMapCacheManager를 사용합니다. SpringBoot의 Application.Properties 구성 파일, Spring.cache Prefix의 속성을 사용하여 구성되었습니다.
응용 프로그램 구성
spring.cache.type =#캐시 된 기술 유형 spring.cache.cache-names = 응용 프로그램 이름은 캐시를 시작합니다 Spring.cache.jcache.provider = 여러 JCache 구현 클래스 일 때 JCache의 구현 클래스를 지정합니다.
항목 클래스 구성
@EnableCaching 주석을 추가하십시오
캐시 주석
| 주석 | 설명하다 |
|---|---|
| @Cachable | 메소드를 호출하기 전에 먼저 캐시에서 메소드의 리턴 값을 찾아야합니다. 이 값을 찾으면 캐시 된 값이 반환됩니다. 그렇지 않으면이 메소드가 호출되고 반환 값이 캐시에 배치됩니다. |
| @Cacheput | 메소드의 리턴 값을 캐시에 넣습니다. 메소드가 호출되기 전에 캐시가 점검되지 않으며 메소드가 항상 호출됩니다. |
| @cacheevict | 캐시에서 하나 이상의 항목을 지우십시오. |
| @Caching | 그룹화 된 주석은 여러 다른 캐시 주석을 동시에 적용 할 수 있습니다. |
수동으로 ehcache를 사용하십시오
실제 개발 과정에서 주석을 사용하지 않고 캐시를 직접 추가 해야하는 상황이 있습니다. Ehcache를 예제로 받아들이고 구성 프로세스를 간단히 기록해 봅시다.
1. 종속성 추가
SpringBoot-Cache 및 Ehcache를 소개하십시오. Ehcache에는 버전 구성이 필요하지 않으며 SpringBoot의 루트 POM이 통합되었습니다.
<!-캐시-> <pectinement> <groupId> org.springframework.boot </groupId> <artifactid> Spring-Boot-Starter-Cache </artifactid> </fectionement> <!-ehcache-> <groupid> net.sf.ehcache </groupId> </infection> ehcache </artifacce>
2. 항목 클래스 구성
@EnableCaching 주석을 추가하십시오
@springbootApplication@enableCachingPublic 클래스 데모 픽션 {} 3. ehcache 구성
src/main/resources 디렉토리에서 ehcache.xml 파일을 추가하고 기사 끝의 내용을 참조하십시오.
4. Application.application 구성
# ehcache cache spring.cache.type = ehcache# ehcache configuration 파일의 경로를 지정합니다. spring.cache.ehcache.config = classpath : /ehcache.xml
5. 캐시를 사용하십시오
SpringBoot의 자동으로 구성된 Bean, org.springframework.cache.cachemanager를 주입하십시오.
간단한 테스트 클래스 :
package com.bbf.frame.test; import com.bbf.frame.application; import org.apache.commons.lang3.stringutils; import org.junit.test; import org.junit.runner.runwith; import org.springfram.test.context.spridertest; org.springframework.cache.cache; import org.springframework.cache.cachemanager; import org.springframework.test.context.junit4.springjunit4classrunner; import org.spramework.test.context.webappconfiguration; 가져 오기; javax.annotation.resource; @runwith (springjunit4classrunner.class)@webappconfiguration@springboottest (classes = application.class.class, webenvironment = springboottest.webenvironment.mock) 공개 클래스 테스트 캐시 {@Resource private cachemanager cachemanager; @test public void cachetest () {// 모든 캐시 공간 System.out.println (stringUtils.join (cachemanager.getCachenames (), ")); 캐시 캐시 = Cachemanager.getCache ( "UserCache"); cache.put ( "키", "123"); System.out.println ( "캐시 성공"); 문자열 res = cache.get ( "key", string.class); System.out.println (Res); }} 부록 ehcache.xml
<? xml version = "1.0"encoding = "utf-8"?> <ehcache xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : nonamespaceschemalocation = "http://ehcache.org/ehcache. 파일 디렉토리를 지정합니다. ehcache가 하드 디스크에 데이터를 쓸 때, 데이터는이 파일 디렉토리에 기록됩니다-> <diskstore path = "java.io.tmpdir"/> <!-기본 관리 정책-> <defaultcache 대 Timetoliveseconds = "120"DiskexPirythreadinterValseconds = "120"MemoryStoreEvictionPolicy = "lru"/> <!-이 캐시는 Timetoliveseconds까지 생존 할 수 있습니다. 기간이 TimetoidleSeconds 초를 초과하고 캐시가 무효화 된 경우-> <cache name = "usercache"Eternal = "False"MaxelementsInmemory = "100"OverFlowTodisk = "false"diskpersistent = "false"timetoidleSeconds = "120"timetoliveseconds = "180"moremorStoreEvicomicy = "! MaxelementsInmemory 메모리에 캐시 된 물체의 최대 수를, 힙 크기를보고-> <!-Eternal : True는 객체가 만료되지 않을 것임을 의미합니다. 이 시점에서, Timetoidleseconds 및 Timetoliveseconds 속성은 무시되고, 기본값은 False-> <!-MaxelementsOndisk : 하드 디스크에서 캐시 된 물체의 최대 수는 무한대를 의미한다면-> <!-오버 플로트 디스크 : 메모리에 캐시 된 물체의 숫자가 최대 한계에 도달 할 때, Maxmentements에 도달 할 때, 진정한 수단. 디스크 캐시. 참고 : 캐시 된 객체를 하드 디스크에 기록하려면 객체가 직렬화 가능한 인터페이스를 구현해야합니다. -> <!-Diskspoolbuffersizemb : 디스크 캐시 크기, 기본값은 30MB입니다. 각 캐시에는 자체 캐시 영역이 있어야합니다. -> <!-DiskPeristent : 가상 머신을 캐시할지 여부-> <!-diskexpirythreadintervalseconds : 디스크 고장 스레드 실행 시간 간격, 기본값은 120 초-> <!-TimetoidLeseconds : 초과 최대 시간을 초월 할 수 있도록 최대 시간을 설정합니다. 마지막으로 객체에 액세스 한 경우, Timetoidleseconds 속성 값이 Timetoidleseconds 속성 값을 초과하면 객체가 만료되고 Ehcache가 캐시에서이를 지우게됩니다. 이 속성은 영원한 재산이 거짓 인 경우에만 유효합니다. 이 속성의 값이 0 인 경우, 객체가 무기한 유휴 상태 일 수 있음을 의미합니다-> <!-Timetoliveseconds : 객체가 캐시에 몇 초 만에 존재하는 최대 시간을 설정합니다. 객체가 캐시에 저장된 경우 캐시의 시간이 Timetoliveseconds 속성 값을 초과하면 객체가 만료되고 ehcache가 캐시에서이를 지우게됩니다. 이 속성은 영원한 재산이 거짓 인 경우에만 유효합니다. 속성 값이 0 인 경우 캐시에 객체가 무기한으로 존재할 수 있음을 의미합니다. Timetoliveseconds는 의미가 있으려면 Timetoidleseconds 속성보다 커야합니다-> <!-MemoryStoreEvictionPolicy : MaxelementsInMemory 한계에 도달하면 EHCache는 지정된 정책에 따라 메모리를 정리합니다. 선택적 정책은 LRU (최근에 사용 된 최신, 기본 정책), FIFO (첫 번째, 첫 번째) 및 LFU (최소 방문 횟수)입니다. -> </ehcache>
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.