1. 程式人生 > >Hibernate快取管理

Hibernate快取管理

1.二級快取配置:  
2. 
3.1、首先要開啟二級快取,在hibernate.cfg.xml中新增如下配置:  
4.<property name="hibernate.cache.use_second_level_cache">true</property> 
5. 
6.2、Hibernate的二級快取使用第三方的快取工具來實現,所以我們需要指定Hibernate使用哪個  
7.   快取工具。如下配置指定Hibernate使用EhCache快取工具。  
8.<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
9. 
10.3、Hibernate在預設情況下並不會對所有實體物件進行快取,所以,我們需要指定快取哪些物件,  
11.在實體物件的對映檔案中(相應的<class>標籤內部),新增如下配置:  
12.<cache usage="read-only"/> 
13. 
14.usage="read-only"是“只讀”快取策略。  
15. 
16.注意,這個<cache>標籤只能放在<class>標籤的內部,而且必須處在<id>標籤的前面!!!  
17.這個<cache>標籤放在哪些<class>標籤下面,就說明會多這些類的物件進行快取  
18. 
19.4、對於第3步,有一個可選的方案是在hibernate.cfg.xml檔案中指定哪些類的物件需要快取,  
20.   而不需要使用<cache>標籤來指定。如:  
21.   在hibernate.cfg.xml中新增如下配置:  
22.   <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" /> 
23.    
24.   注意,這個<class-cache>標籤必須放在<mapping>標籤的後面!!  

1、首先設定EhCache,建立配置檔案ehcache.xml,預設的位置在class-path,可以放到你的src目錄下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
 <diskStore path="java.io.tmpdir"/>
  <defaultCache
   maxElementsInMemory="10000" <!-- 快取最大數目 -->
   eternal="false" <!-- 快取是否持久 -->
   overflowToDisk="true" <!-- 是否儲存到磁碟,當系統當機時-->
   timeToIdleSeconds="300" <!-- 當快取閒置n秒後銷燬 -->
   timeToLiveSeconds="180" <!-- 當快取存活n秒後銷燬-->
   diskPersistent="false"
   diskExpiryThreadIntervalSeconds= "120"/>
</ehcache>

  2、在Hibernate配置檔案中設定:

<!-- 設定Hibernate的快取介面類,這個類在Hibernate包中 -->
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
 <!-- 是否使用查詢快取 -->
 <property name="hibernate.cache.use_query_cache">true</property>
  如果使用spring呼叫Hibernate的sessionFactory的話,這樣設定:
  <!--HibernateSession工廠管理 -->
   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref bean="datasource" />
   </property>
   <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.cache.use_query_cache">true</prop>
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
   </props>
 </property>
 <property name="mappingDirectoryLocations">
  <list>
   <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value>
  </list>
 </property>
</bean>

  說明一下:如果不設定“查詢快取”,那麼hibernate只會快取使用load()方法獲得的單個持久化物件,如果想快取使用 findall()、list()、Iterator()、createCriteria()、createQuery()等方法獲得的資料結果集的話,就需要設定
hibernate.cache.use_query_cache true 才行

  3、在Hbm檔案中新增<cache usage="read-only"/>

  4、如果需要“查詢快取”,還需要在使用Query或Criteria()時設定其setCacheable(true);屬性

  5、實踐出真知,給一段測試程式,如果成功的話第二次查詢時不會讀取資料庫

package cn.rmic.hibernatesample;

import java.util.List;

import org.hibernate.CacheMode;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;
import cn.rmic.manager.po.Resources;

public class testCacheSelectList ...{

 /** *//**
 * @param args
 */
 public static void main(String[] args) ...{
  // TODO Auto-generated method stub

  Session s=HibernateSessionFactory.getSession();
  Criteria c=s.createCriteria(Resources.class);
  c.setCacheable(true);
  List l=c.list();
  // Query q=s.createQuery("From Resources r")
  // .setCacheable(true)
  // .setCacheRegion("frontpages") ;
  // List l=q.list();
  Resources resources=(Resources)l.get(0);
  System.out.println("-1-"+resources.getName());
  HibernateSessionFactory.closeSession();
  try ...{
   Thread.sleep(5000);
  } catch (InterruptedException e) ...{
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  s=HibernateSessionFactory.getSession();
  c=s.createCriteria(Resources.class);
  c.setCacheable(true);
  l=c.list();
  // q=s.createQuery("From Resources r").setCacheable(true)
  // .setCacheRegion("frontpages");
  // l=q.list();
  resources=(Resources)l.get(0);
  System.out.println("-2-"+resources.getName());
  HibernateSessionFactory.closeSession();
 }
}

相關推薦

Hibernate快取管理

1.二級快取配置:   2.  3.1、首先要開啟二級快取,在hibernate.cfg.xml中新增如下配置:   4.<property name="hibernate.cache.u

hibernate如何管理快取

    1. 一級快取和二級快取的比較:第一級快取 第二級快取 存放資料的形式 相互關聯的持久化物件 物件的散裝資料 快取的範圍 事務範圍,每個事務都有單獨的第一級快取程序範圍或叢集範圍,快取被同一個程序或叢集範圍內的所有事務共享 併發訪問策略由於每個事務都擁有單獨的第一級快取,不會出現併發問題,無需提供併發

使用shiro的會話管理和redis快取管理來構建登入模組spring+struts+hibernate(SSH)

     shiro是一個很好用的安全框架,主要表現在使用者認證,許可權認證,會話管理,如果想優化還可以做Cache管理,我們不需要做太多工作在使用者身份token安全方面(記錄shiro及用redis開發的步驟及一些問題,因為網上很多資料都不給全程式碼讓小白沒法理解,這裡我

Hibernate--事務處理和快取管理

事務處理:    事務是資料庫操作中一個最小的執行單元,它由一組相互依賴的操作行為組成。資料庫事務必須具有ACID特徵,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔離性)和Durability(永續性)的英文縮寫。       

Apache Shiro(六)——Shiro快取管理

一、概述 CacheManagerAware 介面 Shiro 內部相應的元件(DefaultSecurityManager)會自動檢測相應的物件(如Realm)是否實現了CacheManagerAware 並自動注入相應的CacheManager。 Realm 快取 S

深入System.Web.Caching名稱空間 教你Hold住快取管理(三)

本文分三篇,從快取所在名稱空間System.Web.Caching開始,詳細的介紹.NET框架提供的快取類和操作方法。看完之後你將學會: 第一篇-如何實現簡單的資料快取 第二篇-快取從檔案中讀取的資料,並通過檔案依賴實現快取資料的及時更新 第三篇-快取資料庫中的整張表,並通過資料庫依賴實現快取

深入System.Web.Caching名稱空間 教你Hold住快取管理(二)

本文分三篇,從快取所在名稱空間System.Web.Caching開始,詳細的介紹.NET框架提供的快取類和操作方法。看完之後你將學會: 第一篇-如何實現簡單的資料快取 第二篇-快取從檔案中讀取的資料,並通過檔案依賴實現快取資料的及時更新 第三篇-快取資料庫中的整張表,並通過資料庫依賴實現快取

深入System.Web.Caching名稱空間 教你Hold住快取管理(一)

本文分三篇,從快取所在名稱空間System.Web.Caching開始,詳細的介紹.NET框架提供的快取類和操作方法。看完之後你將學會: 第一篇-如何實現簡單的資料快取 第二篇-快取從檔案中讀取的資料,並通過檔案依賴實現快取資料的及時更新 第三篇-快取資料庫中的整張表,並通過資料庫依賴實現快取

Shiro - 快取管理與CacheManagerAware介面

【1】Realm快取 Shiro內部相應的元件(DefaultSecurityManager)會自動檢測相應的物件(如Realm)是否實現了CacheManagerAware並自動注入相應的CacheManager。 如專案啟動日誌: [INFO][2018-11-06 15

hibernate——快取

/** * Created by Administrator on 2018/11/16 0016. * 一級快取 Session * 二級快取 SessionFactory * 查詢快取 createQuery */ 一級快取  get,load方

Hibernate快取小結

Hibernate快取 Hibernate一級快取又稱為“Session的快取”,它是內建的,意思就是說,只要你使用hibernate就必須使用session快取。由於Session物件的生命週期通常對應一個數據庫事務或者一個應用事務,因此它的快取是事務範圍的快取。在第一級快取中,持久化類的每個例項都具有唯

手動編寫spring快取管理

引入spring快取依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

hibernate快取:一級快取和二級快取理解

一、什麼是快取:   快取是指為了降低應用程式對物理資料來源訪問的頻次從而提高應用程式的執行效能的一種策略。 二、為什麼使用快取: 1.ORM框架訪問資料庫的效率直接影響應用程式的執行速度,提升和優化ORM框架的執行效率至關重要。 2.Hibernate的快取是提升和

hibernate快取

Cache就是快取,它往往是提高系統性能的最重要手段,對資料起到一個蓄水池和緩衝的作用。Cache對於大量依賴資料讀取操作的系統而言尤其重要。 一級快取session: Hibernate預設是開啟一級快取的,一級快取存放在session上,屬於事務級資料緩衝。

Hibernate快取機制

快取:為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。 快取的工作原理: 物理資料來源——>(資料)快取——>(資料)記憶體 在應用程式中首先會選擇在快取中讀取資料,如果快取中沒有再選擇在資料庫中讀取並把讀取的資料放到快取中;有點類似暫存器

spring+springmvc+hibernate 禮品管理系統

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSch

Hibernate 快取,快照,Session.currentSession和getSession的區別

1,事務快取      Hibernate的預設快取(不能被取消),單會話快取(一級快取)。其只能被當前事務訪問,每個事務都有自己的快取     生命週期依賴於事務的生命週期:當事務結束時,快取的生命週期也結束(事務快取使用記憶體作為快取介質

Spring+Hibernate 快取不起作用

最近做的兩個專案其中一個需求測試一下快取機制下的執行效率,結果配了半天,老是不起作用,而另一套同樣機制下的應用,確起作用查了兩個系統的配置也一樣,下面是我ehcache.xml 檔案的資訊<?xml version="1.0" encoding="UTF-8"?>

.Net快取管理框架CacheManager

Cache 快取在計算機領域是一個被普遍使用的概念。硬體中CPU有一級快取,二級快取, 瀏覽器中有快取,軟體開發中也有分散式快取memcache, redis。快取無處不在的原因是它能夠極大地提高硬體和軟體的執行速度。在專案開發中,效能慢的地方常常是IO操作頻繁的地方,讀取

spring整合hibernate事務管理器配置

連結歸納的很詳細。 首先在/WEB-INF/applicationContext.xml新增以下內容:<!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.