天天看點

Hibernate緩存和ehcache

緩存的概念

         計算機領域非常通用的概念。它介于應用程式和永久性資料存儲源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料存儲源的頻率,進而提高應用的運作性能。緩存中的資料是存儲源總的資料的拷貝。緩存的實體媒體通常是記憶體。

hibernate中提供了兩個級别的緩存

         session級别的緩存

         它是屬于事務範圍的緩存。這一級别的緩存有hibernate管理的,一般情況下午需進行幹預。

         sessionfactory級别的緩存

         它是屬于程序範圍的緩存

啟用二級緩存的條件

很少被修改

很多系統子產品都要用到

不是私有的資料,是共享的

配置二級緩存

1、  拷貝ehcache-1.5.0.jar到目前工程的lib目錄下

2、  開啟二級緩存

3、  要指定緩存的供應商

<property name=”hibernate.cache.provider_class”>org.hibernate.cache.ehcacheprovider</property>

4、  指定使用二級緩存的類

方法一  在使用類的*.hbm.xml配置

選擇需要使用二級緩存的持久化類,設定它的二級緩存的兵法通路政策,<class>元素的cache子元素表明hibernate會緩存對象的簡單屬性,但不會緩存集合屬性,若希望緩存集合屬性中的元素,必須在<set>元素中加入<cache>子元素

<class name=”cn.itcast.c3p0.customer” table=”customers” lazy=”false”>

         <!—配置類級别的二級緩存à

         <cache usage=”read-write”/>

<set name=”orders” table=”orders” inverse=”true” fetch=”select” lazy=”false”>

         <!—配置集合級别的二級緩存à

方法二   在hibernate.cfg.xml檔案中配置(建議)

<!—指定使用二級緩存的類,放在maping下面à

<!---配置類級别的二級緩存-->

<class-cache class=”cn.itcast.c3p0.customer” usage=”read-write”/>

<class-cache class=”cn.itcast.c3p0.order” usage=”read-write”/>

<!—配置集合級别的二級緩存à

<collection-cache collection=”cn.itcast.c3p0.customer.orders” usage=”read-write”/>

<diskstore path=”d:\cache”/>

<cache name=””

maxelementsinmemory=”100”

eternal=”false”

timetoidleseconds=”300”

timetoliveseconds=”600”

overflowtodisk=”true”

diskpersistent=”false”/>

</ehcache>

<diskstore path=”c:\\temp”/>:如果記憶體中的資料已經達到所要求存放的最大值的時候。這個時候,其他的資料将會以檔案的形式存放到磁盤上。

<defaultcache>設定緩存的預設資料過期政策

<cache>設定具體的命名緩存的資料過期政策

每個命名緩存代表一個緩存區域,每個緩存區域有各自的資料過期政策。命名緩存機制使得使用者能夠在每個類以及類的每個集合的粒度上設定過期政策。

cache元素的屬性

name:設定緩存的名字,它的取值為類的全限定名或類的集合的名字

maxelementsinmemory:設定基于記憶體的緩存中可存放的對象最大數目

eternal:設定對象是否為永久的,true表示永不過期,此時将忽略

timetoidleseconds:設定對象空閑最長時間,以秒為機關,超過這個時間,對象過期。當對象過期是,ehcache會把它從緩存中清空。如果此值為0,表示對象可以無限期地處于空閑狀态。

timetoliveseconds:設定對象生存最長時間,超過這個時間,對象過期。如果此值為0,表示對象可以無限期地存在緩存中,該屬性必須大于或等于timetoidleseconds屬性值。

overflowtodisk:設定基于内在的緩存中的對象數目達到上限後,是否把溢出的對象寫到硬碟的緩存中。

diskpersistent當jvm結束時是否持久化對象true  false預設是false

diskexpirythreadintervalseconds指定專門用于清除過期對象的監聽線程的輪詢時間。