이 기사에서는 최대 절전 모드 프레임 워크의 캐싱 기술에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
최대 절전 모드 프레임 워크의 캐시는 레벨 1 캐시 및 레벨 2 캐시라고도 알려진 세션 캐시 및 세션 별 캐시로 나뉩니다.
레벨 1 캐시 :
레벨 1 캐시는 수명주기가 짧고 세션에 해당하며 최대 절전 모드에 의해 관리되며 트랜잭션 전체 캐시입니다. 프로그램이 Session Load () 메소드를 호출하면 get () 메소드, save () 메소드, saveorupdate () 메소드, update () 메소드 또는 쿼리 인터페이스 메소드가 Entity Object를 캐시합니다. Load () 메소드 또는 get () 메소드를 통해 엔티티 객체가 쿼리되면 Hibernate는 먼저 캐시에서 쿼리됩니다. 엔티티 객체를 찾을 수없는 경우에만 최대 절전 모드는 데이터베이스에서 쿼리에 SQL 문을 발행하여 최대 절전 모드의 사용 효율성을 향상시킵니다.
예를 들어:
package com.xqh.util; import org.hibernate.session; import com.xqh.model.user; public class test {public static void main (string [] args) {세션 세션 = null; try {session = hibernateutil.getsession (); // sessionssion.begintransaction ()을 얻습니다. // 트랜잭션 System.out.println 활성화 ( "첫 번째 쿼리 :"); 사용자 user = (user) session.get (user.class, new Integer (1)); system.out.println ( "username :" + user.getname ()); system.out.println ( "Second Query :"); user user1 = (user) session.get (user.class, 1); system.out.println ( "username :" + " + user1.getName ()); session.getTransaction (). commit ();} catch (예외 e) {e.printstacktrace (); // 오류는 트랜잭션 세션을 롤백합니다.프로그램이 get () 메소드를 통해 사용자 객체를 처음 확인하면 Hibernate는 쿼리에 SQL 문을 발행합니다. 현재 Hibernate는 사용자 객체에서 1 단계 캐시를 수행합니다. get () 메소드를 다시 쿼리하면 사용자 이름이 이미 1 단계 캐시에 존재하기 때문에 Hibernate는 SQL 문을 발행하지 않습니다. 프로그램 실행 결과 :
첫 번째 쿼리 : hibernate : selectUser0_.id as as Id0_0_, user0_.name as as name0_0_.
참고 : 첫 번째 수준 캐시의 수명주기는 세션에 해당하며 세션간에 공유되지 않습니다. 다른 세션에서는 다른 세션에 캐시 된 엔티티 객체를 얻을 수 없습니다.
레벨 2 캐시 :
두 번째 레벨 캐시는 세션 별 수준 수준 캐시이며 수명주기는 SessionFactory와 일치합니다. 보조 캐시는 여러 세션에서 공유 할 수 있으며 프로세스 전체 또는 클러스터 전체 캐시입니다.
레벨 2 캐시는 플러그 가능한 캐시 플러그인이며, 사용하려면 타사 캐시 제품을 지원해야합니다. 최대 절전 모드 프레임 워크에서 보조 캐시의 사용 정책은 최대 절전 모드 구성 파일을 통해 구성됩니다.
1. 캐시 구성 파일을 추가하십시오 ehcache.xml
<ehcache> <! - 캐시 파일이 생성되는 디렉토리로 경로를 설정합니다. 경로가 Java 시스템 속성 인 경우 vm.에서 값으로 대체됩니다. 다음 속성은 변환됩니다. user.home -user 's Home DirectoryUser.dir- 사용자의 현재 Working DirectoryJava.io.tmpdir- 기본 Temp Path-> <diskstore. path = "java.io.tmpdir"/> <!-기본 캐시 구성. 이들은 Cachemanager를 통해 프로그램 된 캐시에 적용됩니다. 다음 속성은 DefaultCache에 필요합니다. MaxInmemory- MemoryETERNAL에서 생성 될 최대 객체 수를 설정합니다. 영원한 시간 초과가 무시되고 요소가 만료되지 않았다. Timetoidleseconds- 만료되기 전에 요소를 공전 할 시간을 설정한다. 요소가 영원하지 않은 경우에만 사용됩니다. 유휴 시간은 이제 - 마지막으로 액세스 한 Timetimetoliveseconds- 만료되기 전에 요소를 살 수있는 시간을 설정합니다. 요소가 영원하지 않은 경우에만 사용됩니다. TTL은 이제 -creation timeoverflowtodisk-in-memory cachehas가 MaxinMemory 한계에 도달했을 때 요소가 디스크로 넘쳐날 수 있는지 설정합니다 .-> <defaultCacheAcaLesmentementSinMemory = "100000"Eternal = "False"TimetoidleSeconds = "120"timetoleconds = "120"Overflow = "/>>. 캐시. 캐시 구성 설정을 여기에 추가하십시오. 캐시에 대한 구성이없는 경우 theCacheManager를 시작할 때 경고가 발행됩니다. 다음 속성은 DefaultCache에 필요합니다. 이름 - 캐시의 이름을 설정하십시오. 이것은 캐시를 식별하는 데 사용됩니다. maxinmemory- 메모리 에너널에서 생성 될 최대 객체 수를 설정합니다 - 요소가 영원한 지 여부를 설정합니다. 영원한 시간 초과가 무시되고 요소가 만료되지 않았다. Timetoidleseconds- 만료되기 전에 요소를 공전 할 시간을 설정한다. 요소가 영원하지 않은 경우에만 사용됩니다. 유휴 시간은 이제 - 마지막으로 액세스 한 Timetimetoliveseconds- 만료되기 전에 요소를 살 수있는 시간을 설정합니다. 요소가 영원하지 않은 경우에만 사용됩니다. TTL은 현재-생성 TimeOverFlowTodisk- 인 메모리 캐시 하스가 MaxInmemory 한계에 도달했을 때 요소가 디스크로 넘쳐날 수 있는지 여부를 설정합니다 .-> <!-샘플레시라는 샘플 캐시 1이 캐시는 10000 요소의 메모리에 최대의 메모리가 포함되어 있으며, 10 분 이상으로 유휴 상태가 될 경우 10000 개 이상의 수명이 지나면 10000 개 이상의 수명이 있습니다. 이 구성에서 java.io.tmp가 시스템에서 정의되는 곳으로 이동하는 Thedisk 캐시. 표준 Linux 시스템에서 이것은 /tmp "-> <cache name ="samplecache1 "maxelementsInmemory ="10000 "Eternal ="false "timetoidleseconds ="300 "timetoliveseconds ="600 "Overflowtodisk ="true " /> <!-샘플 캐시라는 샘플 캐시 2this cache cachains 100 elements는 그렇지 않을 것입니다. 만료.-> <samplecache2 "maxelementsInmemory ="1000 "Eternal ="True "TimetoidleSeconds ="0 "Timetoliveseconds ="0 "OverFlowTodisk ="false "/>-> <!
2. 최대 절전 모드 구성 파일을 설정하십시오.
<!-레벨 2 캐시 활성화-> <property name = "hibernate.cache.use_second_level_cache"> true </propert> <!-캐시 제품 제공 업체를 지정합니다-> <property name = "hibernate.cache.provider_class"> org.hibernate.cache.ehcacheprovider </property> <! 캐시 ---> <class-cache usage = "읽기 전용"> </class-cache>
예:
패키지 com.xqh.util; import org.hibernate.session; import com.xqh.model.user; public class test {public static void main (String [] args) {세션 세션 = null; // 첫 번째 세션 {session = hibernateUtil.getSession (); session.beginTransaction (); system.out.println ( "첫 번째 쿼리 :"); user user = (user) session.get (user.class, 1); system.out.println ( "user name :" + user.getname ()); commit (). {e.printstacktrace (); // 오류는 트랜잭션 세션을 롤백합니다. getTransaction (). rollback ();} 마지막으로 {// 세션 객체 hibernateutil.closesession (session);} try {session = hibernateutil.getsession (); // 두 번째 캐시 세션을 활성화합니다 .BegIntransaction (); System.out.println ( "Sec 트랜잭션 세션 .getTransaction (). rollback ();} 마지막으로 {// 세션 객체 hibernateutil.closesession (session);}}}을 닫습니다.보조 캐시는 세션간에 공유되므로 다른 세션에서 동일한 객체를로드 할 수 있습니다. 최대 절전 모드는 하나의 SQL 명령문 만 발행합니다. 객체가 두 번째로로드되면 최대 절전 모드는 캐시 에서이 객체를 얻습니다.
프로그램 결과 :
첫 번째 쿼리 : hibernate : selectUser0_.id as as Id0_0_, user0_.name as as name0_0_.
L2 캐시의 경우 일부는 드물게 업데이트 된 데이터 또는 참조 된 데이터를 사용할 수 있으며 현재 성능이 크게 향상 될 것입니다. 그러나 자주 변경된 데이터가 L2 캐시에 사용되면 성능이 특정 문제를 일으 킵니다.
이 기사의 설명이 최대 절전 모드 프레임 워크를 기반으로 한 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.