이 기사의 주요 연구는 다음과 같이 스프링 캐시 관련 컨텐츠에 관한 것입니다.
이 기사는 Google 번역을 기반으로 대략 수정되었습니다. 원본 텍스트가 무엇인지 알지 못하기 때문에 번역에서 오류와 부정확성으로 이어질 수 있지만 일반적인 방향은 매우 기분이 좋으므로 여기서 정리하여 도움이되기를 바라고 있습니다.
캐싱은 항상 애플리케이션 성능을 향상시키고 작업량을 줄이기 위해서는 항상 큰 필요성이었습니다. 또한, 오늘날의 유용성은 특히 분명합니다. 오늘날 동시에 수천 명의 방문자를 처리하는 데 사용될 수 있습니다. 버전 3.1에서 시작하여 Spring은 선언 트랜잭션 관리와 유사한 캐시 관리 API를 제공합니다. 통일 된 방식으로 다른 캐시 솔루션을 사용하는 캐시의 추상 인터페이스는 코드에 가장 큰 영향을 미칩니다.
Spring은 Java 메소드를 사용하여 매개 변수와의 조합에 대한 메소드를 처음으로 요청하고 Spring은 캐시의 리턴 값을 저장합니다. 따라서 다음 요청은 가능한 비용이 많이 드는 방법을 호출하지 않고도 캐시의 값을 직접 사용하는 것입니다. 모든 것이 불리는 방법에 영향을 미치지 않고 투명하게 적용됩니다.
이 게시물에서는 스프링에서 두 개의 다른 캐시 저장소를 구현할 것입니다.
스프링과 캐시의 통합은 간단하고 투명합니다. 캐시가 필요한 메소드는 @Cachable 주석으로 주석을 달 수 있습니다.
@Cachable (value = "Datacache") public reponse getDatas (long param1, String param2) {} Datacache는 관련 캐시의 이름입니다. 이 메소드가 처음으로 호출되면, 메소드는 실행 결과를 실행하고 실행 결과를 결과로 <매개 변수 1 및 매개 변수 2>에서 해시 된 비밀 키로 설정하여 결과를 저장합니다. 동일한 매개 변수를 다시 호출하면이 메소드를 다시 실행할 필요가 없습니다.
둘 이상의 캐시가 우리의 방법과 연관 될 수 있습니다.
@Cachable ({ "datacache", "default"}) public reponse getDatas (long param1, String param2) {} 이 경우 메소드가 실행되기 전에 각 캐시가 확인되며 적중이 있으면 관련 값이 반환됩니다.
캐시 관리자의 기본 알고리즘의 비율은 비교적 작습니다. 캐시는 저장된 객체가 고유 키로 매핑되는 메모리 영역으로 간주 될 수 있습니다. 객체 검색 프로세스는 다음과 같습니다.
1. 키 계산 (해시 메소드 사용 해시 코드를 얻습니다)
2. 키 값을 기준으로 객체를 찾으십시오
3. 객체가 발견되면 결과를 반환하십시오
4. 찾을 수없는 경우 실제로 객체와 관련된 키가 계산되고 해당 위치에 객체가 저장됩니다.
Spring은 간단한 해시를 사용하여 전달 된 메소드 매개 변수를 기반으로 키를 생성합니다.
대상 방법은 매개 변수를 기반으로 불필요한 키를 생성 할 수 없지만 매개 변수에 따라 일부 간단한 경우 만 생성됩니다.
@Cachable (value = "Datacache") public reponse getDatas (long param1, String param2, boolean param3) {}@Cachable을 사용하면 개발자가 키 생성이 스스로 생성되는 방식을 지정할 수 있습니다. Spel 표현식을 사용하여이를 수행 할 수 있습니다.
@Cachable (value = "datacache", key = "#param2") public reponse getDatas (long param1, String param2, boolean param3) {} 위 의이 경우 캐시 된 키의 매개 변수는 Parma2입니다.
봄은 또한 중첩 특성을 허용합니다
@Cachable (value = "datacache", key =#param2.name ") public reponse getDatas (long param1, data param2, boolean param3) {} 이 상황은 PARMA2의 이름 속성에 따라 계산 된 키입니다.
중고 케이스의 캐시에 적합하지 않은 캐시가 있지만 경우에 따라 캐시가 필요합니다. 캐시에 캐시되면 캐시는 SPEL 표현식에 의해 계산 된 True 또는 False에 따라 처리되고 조건이 true 인 경우 캐시가 수행됩니다.
@Cachable (value = "datacache", key = "#param2", 조건 = "#param2.length <64") public reponse getDatas (long param1, String param2, boolean param3) {} 이 경우 캐시는 두 번째 매개 변수의 길이가 64 미만인 경우에만 수행됩니다.
Spring의 캐시는 데이터를 캐시 할뿐만 아니라 캐시 스토리지를 지울 수 있습니다. 이 프로세스는 오래된 데이터 또는 사용하지 않은 캐시 데이터를 제거하는 데 사용됩니다. 주석 @CacheEvict는 캐시 빈을 수행하기위한 메소드를 정의합니다. 이는 캐시에서 데이터를 삭제하기위한 트리거입니다.
@cacheevict (value = "datacache") public void reloaddata () {}이 옵션은 매우 필요하며,이 방법은 캐시 된 데이터를 지워야 할 때 사용됩니다.
스프링 프로젝트에 대한 캐시 지원을 활성화하려면 네임 스페이스에 캐시 주석을 추가해야합니다.
<beans xmlns = "http://www.springframework.org/schema/beans"xmlns : cache = "http://www.springframework.org/schema/cache"xmlns : xsi = "http://www.w.w.w.g.org/2001/xmlsmemal xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans-2 http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://wwwww.sprampramett <캐시 : 주석 구동 />
삭제 삭제 삭제는 캐시를 비활성화하거나 구성 클래스에서 캐시 사용을 활성화 할 수 있습니다.
@Configuration @EnableCaching Public Class AppConfig {} 기술적 한계
객체 패스 방법의 매개 변수에는 비밀 키를 계산하기 위해 자체 해시 코드 메소드가 있어야합니다.
객체가 전달되어 매개 변수로 반환되면 직렬화 가능해야합니다.
선택을 구현하십시오
Spring은 두 가지 기본 구현을 제공합니다.
그것들을 사용할 때, 당신은 적절한 Cachemanger 및 Manager 엔티티 만 선언하면됩니다.
Java를 사용한 Consurenthashmap
<bean id = "cachemanager"> <span style = "white-space : pre"> </span> <property name = "caches"> <span style = "white-space : pre"> </span> <set> <span style = "white"> </span = "default"/> <span style = "화이트 공간 : pre"> </bean> </bean>.
각 관리자는 이름으로 인식되는 이름이 필요합니다. 구유로 여러 개의 단순한 카케 맨을 관리 할 수 있으며이 구현은 기본적으로 불필요합니다.
ehcache를 구현하십시오
Cachemanger의 진술
bean id = "cachemanager"> <property name = "cachemanager"ref = "ehcache"/> </bean> <bean id = "ehcache"> <property name = "configlocation"value = "classpath : ehcache.xml"/> <property name = "shared"value = "true"/> </bean>
ehcache.xml 파일에서 응용 프로그램 캐시 매개 변수 파일입니다.
<ehcache xsi : nonamespaceschemalocation = "ehcache.xsd"updateCheck = "true"monitoring = "autodetect"dynamicConfig = "true"maxByteslocalHeap = "150m"> <diskstore path = "java.io.tmpdir"/> <defaultCache = "100" OverflowTodisk = "false"/> <cache name = "datacache"대 MemoryStoreEvictionPolicy = "lru"/> </ehcache>
ehcache를 사용하면 여러 캐시 다른 매개 변수를 매우 간단한 방식으로 정의 할 수 있습니다.
이름 : 캐시 된 식별자
MaxByteslocalHeap : 캐시가 가상 머신에 사용할 수있는 바이트 수를 정의합니다. Cachemanager MaxbyTeslocalHeap이 설정된 경우 캐시 메너에 의해 캐시의 결정된 크기를 빼게됩니다. 다른 캐시 공유 중단. 이 속성의 값은 데이터 <number> k | k | m | m | g | G는 킬로비트 (k | k), 메가 바이트 (m | m) 또는 기가 바이트 (g | g)를 나타냅니다.
영원 : 요소가 영원한 지 정의합니다. 이 경우 시간 초과가 무시되고 프로젝트가 만료되지 않습니다.
Timetoidleseconds : 이것은 초의 수이며, 항목은 마지막 사용에 남겨졌습니다. LA 기본값은 0이며 요소는 여전히 남아 있습니다.
Timetoliveseconds : 이것은 프로젝트가 Cache에서 살았던 초 수입니다. 기본 가치 생성은 0이며 프로젝트는 영원히 살아납니다.
MemoryStoreEvictionPolicy Plunder 정책 : LRU- 최소한 최근에 사용되었으며, 생성 날짜에 따라 FIFO- 최초의 가장 오래된 요소를 드물게 사용했습니다.
diskexpirythreadintervalseconds : 차압 프로세스는 두 실행 사이의 초 수를 제어합니다.
DiskPersistent : 디스크에 저장된 가상 머신의 두 경기 사이에서 물체를 복원 할 수 있습니다.
OverflowTodisk : 최대 저장 요소를 달성하기 위해 객체를 디스크에 저장할 수 있는지 여부를 결정합니다.
요약하려면 간단한 수학 공식을 사용하십시오 : expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
위의 내용은이 기사에서 Spring Cache 코드에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!