온라인 몰 홈페이지에는 인기있는 제품이 있으므로 이러한 제품의 클릭률은 매우 높습니다. 사용자가 인기있는 제품을 클릭하면 Taobao와 마찬가지로 제품의 자세한 정보 페이지를 입력해야합니다. 그런 다음 클릭 할 때마다 배경으로 이동하여 제품의 자세한 정보를 쿼리해야하며 해당 SQL 문을 보냅니다. 자세한 페이지를 새로 고칠 때마다 SQL 문도 보냅니다. 이런 식으로, 성능은 분명히 큰 영향을받을 것입니다. 그런 다음 최대 절전 모드의 보조 캐시를 사용하면이 문제를 해결할 수 있습니다.
어떤 사람들은 우리가 리디렉션을 사용할 수 있다고 생각할 수도 있습니다. 이런 식으로 사용자가 처음 방문 할 때 정보를 찾아 세션에 넣을 수 있습니다. 앞으로 사용자가 새로 고침 할 때마다 세션으로 이동할 수 있으므로 데이터베이스에서 쿼리 할 필요가 없습니다. 이는 의미가 있지만, 해결하려는 것은 여러 사용자가 동일한 제품에 액세스하고 동일한 제품을 클릭한다는 것입니다. 리디렉션은 동일한 사용자가 클릭하거나 새로 고침되도록 할 수 있습니다. 그러나 보조 캐시는 이러한 문제를 해결할 수 있습니다.
먼저 Hibernate4.3을 기반으로 한 2 차 캐싱 기술을 자세히 설명한 다음이 프로젝트에 대한 특정 구성을 작성하겠습니다.
1. Hibernate4.3 레벨 2 캐시 기본 구성
Hibernate3과 달리 Hibernate4.3의 핵심 패키지에는 캐시 관련 클래스가 없습니다. 보조 캐시를 사용하려면 캐시 된 JAR 패키지를 추가해야합니다. hibernate reelease-4.3.11의 공식 다운로드에서 2 차 캐시에 필요한 JAR 패키지가 있으며, 먼저 프로젝트에 추가해야합니다. 다음과 같이 :
그런 다음 Hibernate.cfg.xml에서 보조 캐시 관련 구성을 구성합니다.
<Hibernate-Configuration> <session-factory> <property name = "divelect"> org.hibernate.dialect.mysqldialect </property> <property name = "show_sql"> true </property> <!-2 차 캐시 제공자를 구성합니다. 이름 = "hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.ehcacheregionfactory < /property> <mapping /<mapping /<맵핑 /> <!- 지원 지원을 구성하는 클래스는 무엇입니까? 이것은 주로 홈페이지에 인기있는 제품을 표시하므로 제품 클래스는 캐싱을 지원합니다-> <class-cache usage = "읽기 전용"/> </session-factory> </hibernate-configuration>
그런 다음 Tomcat 서버를 열고 홈페이지를 방문하고 인기있는 제품을 클릭하면 백그라운드에서 SQL 문이 전송되지 않습니다. 두 번째 레벨 캐시가 그렇게 간단한가요? 이 두 항목 만 구성 하시겠습니까? 실제로, 레벨 2 캐시가 지금까지 발효 된 이유는 기본 구성이 있기 때문입니다. 위의 ehcache-core-2.4.3.jar에는 이미 기본 구성이있는 ehcache-failsafe.xml 파일이 있습니다. 나중에 자세히 분석 할 것입니다. 먼저 최대 절전 모드의 쿼리 전략을 분석하겠습니다.
2. Hibernate4.3 쿼리 전략
Hibernate는 세션 쿼리와 HQL 쿼리의 두 가지 쿼리 방법을 지원합니다.
Session.Save () update () delete () get () load () 및 기타 메소드가 있습니다. 이 메소드는 하나의 레코드에서만 작동하며 기본값은 구성없이 레벨 2 캐시를 지원하는 것입니다. 따라서 : 읽기 전용 구성은 세션에 효과적입니다. 세션의 보조 캐시에서 읽기 전용이 구성되면 Session.upDate () 및 Delete () 작업이 모두 실패합니다. 성공하려면 읽기 쓰기를 구성해야합니다. 그러나 저장 () 및 get () load ()가 성공적입니다.
HQL :이 메소드는 List () 및 executeUpdate () 메소드와 같은 기본적으로 여러 레코드를 작동하는 데 사용됩니다. 이 메소드는 읽기 전용을 포함한 보조 캐시 구성의 기본값이 잘못되었습니다. HQL의 List ()는 여러 레코드를 쿼리하고 데이터베이스를 직접 쿼리하고 쿼리 결과를 보조 캐시에 전달하여 get () 및 load ()의 호출을 용이하게합니다. ExecuteUpdate는 보조 캐싱을 지원하지 않으며 데이터베이스에 직접 업데이트됩니다. Hibernate는 데이터베이스 및 캐시가 동기화되도록합니다. 참고 : HQL에는 save () 메소드가 없습니다. 데이터를 삽입 해야하는 경우 Session.Save () 메소드 만 호출 할 수 있습니다.
[참고] : 최대 절전 모드의 첫 번째 수준 캐시 (기본적으로 존재)를 세션 수준 캐시라고도하며 성능을 향상시키는 데 사용되는 것이 아니라 트랜잭션을 처리하는 데 사용됩니다. 두 번째 레벨 캐시는 모든 세션에 유효한 세션 별 캐시이며 수명주기는 SessionFactory와 동일합니다 (SessionFactory는 싱글 톤이며 프로젝트가 시작될 때 생성됩니다).
특정 쿼리 전략은 다음 그림을 살펴 보겠습니다.
【참고 if : 그림의 텍스트가 너무 작 으면 사진을 새 창으로 끌어서 볼 수 있습니다 ~
위는 최대 절전 모드의 쿼리 전략입니다. 보조 캐시의 구성을 계속 살펴 보겠습니다.
3. 최대 절전 모드 4.3 레벨 2 캐시 고급 구성
위에서 언급했듯이 Hibernate.cfg.xml에서 두 항목을 구성한 후 Level 2 캐시를 사용할 수있는 이유는 기본 구성이 있기 때문입니다. 이 기본 구성을 먼저 살펴 보겠습니다.
<ehcache xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : nonamespaceschemalocation = "../ config/ehcache.xsd"> <!-캐시 메모리가 오버플로되면 하드 디스크 공간에 저장 될 것입니다-> <diskstore. path = "java.io.tmpdir"/> <defaultCache maxelementsInmemory = "10000": <!-메모리가 지원하는 최대 객체의 수는-> Eternal = "false": <!-객체가 영구적으로 유효한지 여부에 관계없이 다음 두 파라 미터가 유효 할 것입니다. 초. 즉, 60 초 후에이 객체를 사용하지 않으면 사전에 파괴됩니다.-> timetoliveseconds = "120": <!-객체의 수명주기는 초입니다-> OverflowTodisk = "true": <!-하드 디스크에 대한 오버플로가 지원되는지-> maxelementsisk-> maxelementsisk "" MemoryStoreEvictionPolicy = "lru": <!-객체 교체 정책-> /> < /ehcache>
기본 구성에 대한 관련 설명은 이미 위의 주석에 있습니다. 우리는 이제이 기본 구성으로 인해 최대 절전 모드 4.3의 두 번째 레벨 캐시를 올바르게 실행할 수 있다는 것이 정확히 알고 있습니다. 이제 캐시를 직접 구성하려면 SRC 디렉토리에 새 ehcache.xml 파일을 작성한 다음 위 구성 항목을 재구성해야합니다. 다음으로 각 구성을 테스트해야합니다. 테스트하기 전에 홈페이지에 표시된 상황을 게시하고 숫자를 만듭니다. 테스트 할 때 나중에 설명해 봅시다 :
위는 홈페이지에 표시된 콘텐츠의 일부입니다. Hibernate는 데이터베이스에서 디스플레이 정보를 찾았으며 표시되었습니다. 우리는 그것들을 숫자로 만들 것이며 나중에 캐시를 테스트 할 때 분석하기가 더 쉬울 것입니다. 위의 캐시 구성 항목 테스트를 시작하겠습니다.
테스트 1 : 메모리의 물체 수를 테스트하십시오. 구성을 다음 상황으로 변경하십시오.
<defaultCache maxelementsInmemory = "6"<!-설정 6 캐시 만 지원합니다-> Eternal = "True"OverFlowTodisk = "False"MemoryStoreEvictionPolicy = "FIFO": <!-First-out-> />
구성이 완료되면 서버를 다시 시작하고 홈페이지를 엽니 다. 6 개의 구성이 있으므로 캐시에 발견 된 마지막 6 개의 레코드 만 저장됩니다. 3-8의 제품을 클릭하여 제품 세부 정보 페이지를 입력합니다. 백그라운드의 콘솔은 쿼리 정보를 출력하지 않으므로 SQL 문이 전송되지 않음을 의미합니다. 그러나 제품 번호 2를 클릭하면 백그라운드에서 SQL 문이 전송됩니다. 즉, 데이터베이스가 쿼리됩니다. 우리는 제품 2를 다시 뒷받침하고 클릭했으며 SQL 문이 전송되지 않으므로 캐시에 넣었지만 캐시는 6 개의 데이터 만 지원합니다. 구성된 객체 교체 전략이 먼저, 먼저, 캐시의 숫자 3이 방금 제거되었습니다. 우리는 3을 클릭하여 SQL 문을 보냈습니다. 따라서 테스트가 완료되고 두 번째 레벨 캐시 실행이 정상입니다.
테스트 2 : 테스트 객체의 수명주기. 구성을 다음 상황으로 변경하십시오.
<defaultCache maxelementsInmemory = "100"Eternal = "False"<!-오지 일치에만 해당하여 다음 수명주기를 설정할 수 있습니까?> Timetoidleseconds = "20"Timetoliveseconds = "40"OverFlowTodisk = "False"MemoryStoreEvictionPolicy = "FIFO" />
캐시 시간은 40 초로 구성되며 20 초 안에 작동이 없으면 제거됩니다. 100 개의 레코드를 할당 했으므로 위의 숫자는 모두 캐시에 있습니다. 서버를 활성화 한 후에는 서버를 클릭하고 8 번을 클릭하면 SQL 문이 발행되지 않습니다. 일반적으로 20 초 후에는 8 번을 클릭하고 SQL 문을 보내면 구성한 수명주기가 적용되었음을 나타냅니다. Tomcat을 시작하는 데 몇 초가 걸리기 때문에 10 초와 같이 구성이 너무 짧을 수 없습니다. 구성이 적은 경우 테스트하기 전에 시간이 올라 갔을 수 있습니다. 그렇지 않으면 작동하지 않습니다.
테스트 3 : 보조 캐시가 하드 디스크 스토리지를 지원하는지 여부를 테스트하십시오.
<defaultCache maxelementsInMemory = "4"4 "Eternal ="False "<!-False를 설정하여 다음과 같은 수명주기를 설정할 수 있습니까?> TimetoidleSeconds ="100 "timetoliveseconds ="200 "OverFlowTodisk ="true "<!
지원 하드 디스크 스토리지를 True로 설정하고 보조 캐시의 최대 저장 용량을 4로 구성합니다. 서버를 다시 시작하십시오. 보조 캐시는 최대 4 개의 레코드를 저장하므로 5-8로 번호가 매겨져야합니다. 5-8을 클릭하면 SQL 문을 보낼 수는 없지만 1-4를 클릭하면 하드 디스크 스토리지에 대한 지원을 설정하기 때문에 SQL 문을 보내지 않으면 Hibernate는 쿼리 결과를 하드 디스크에 저장하므로 SQL 문을 보내지 않고 데이터를 직접 얻을 수 있습니다.
테스트 4 : 레벨 2 캐시의 교체 전략 테스트
<defaultCache <!-FIFO가 제거되고 다시 사용되지 않을 것입니다 ... LRU : 최소한 최근에 액세스 한 알고리즘 (시간 정책), 액세스 빈도는 무시 될 것이며 가장 먼 시간에 액세스 한 시간은 LFU를 대체 할 것입니다. maxelementsInMemory = "3"Eternal = "False"<!-False로 구성 될 때만 다음 수명주기를 설정할 수 있습니까?> TimetoidleSeconds = "100"Timetoliveseconds = "200"OverFlowTodisk = "False"<!
이름에서 알 수 있듯이 LRU와 LFU는 각각 마지막 액세스 시간과 빈도에 중점을 둡니다. LFU를 예로 들어 봅시다. 이제 최대 저장소를 3 개의 레코드, 즉 6-8로 설정했습니다. 이제 우리는 숫자 6에 3 번, 숫자 7을 두 번, 8 번은 한 번, SQL 문을 발행하지 않습니다. 숫자 7에 다시 액세스하고 SQL 문을 발행합니다. 이제 7 번은 캐시에 있으며 액세스 수가 가장 적기 때문에 8 번은 제거되었습니다. 8 번 클릭하여 다시 테스트하고 SQL 문을 발행하면 테스트가 성공할 수 있습니다. LRU 인 경우 방금 제거 된 숫자 6은 숫자 6이 가장 빨리 액세스하기 때문에 숫자 6입니다.
이 시점에서 모든 사람들이 보조 캐시 사용을 마스터했으며 2 차 캐시 테스트가 여기서 끝납니다. 온라인 쇼핑몰 프로젝트를 구성하겠습니다.
4. 온라인 쇼핑몰 프로젝트의 실제 구성
보조 캐시의 최대 레코드 수를 1000으로 구성하고 수명주기를 120 초로 설정하고 간격 사이클을 60 초로 설정합니다. 하드 디스크 스토리지를 지원하고 사용자 클릭 속도가 높으면 보조 캐시에 배치해야하므로 주파수 우선 순위 (LFU) 교체 전략을 사용합니다.
<ehcache xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : nonamespaceschemalocation = "../ config/ehcache.xsd"> <! <!-하드 디스크 공간에 저장-> <diskstore path = "java. <defaultCache maxelementsInMemory = "1000"Eternal = "false"timetoidleseconds = "60"Timetoliveseconds = "120"OverFlowTodisk = "True"MemoryStoreEvictionPolicy = "lfu" /> < /ehcache>
온라인 쇼핑몰 프로젝트와 함께 최대 절전 모드 4.3의 두 번째 레벨 캐시의 구성 및 사용이 소개됩니다.
원본 주소 : http://blog.csdn.net/eson_15/article/details/51405911
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.