天天看點

Hibernater基礎之緩存下

1.一級緩存的概念

1.1.Hibernate一級緩存又被稱作Session緩存和會話緩存。

1.2.通過Session從資料中查詢出實體會将實體在記憶體中儲存起來,下一次查詢同一實體時候就不必查詢資料庫而是從記憶體中擷取,這就是緩存。

1.3.一級緩存的生命周期和Session相同的,Session銷毀,緩存也會消失。

1.4.一級緩存使用的範圍在目前會話中。

2.一級緩存的API

2.1.一級是無法取消的是Hibernate預設的,通過兩個方法管理

2.2.evict():用于将某個對象從Session緩存中消除

2.3.clear():将緩存中的所有對象都删除

注明:有時候一級緩存也會對性能産生影響

2.4.當我們在一個會話中多次使用query.list()執行同一HQL語句時候,我們是會在此發送HQL語句的(query.list()方法是不會使用緩存的)。

2.5.query.iterate()方法進行查詢時候同樣也會發送HQL語句不過僅僅查詢一列(首先從表中查詢出編号,然後從緩存中根據編号查詢對應的對象,找到傳回沒有找到則發送HQL語句去資料庫查詢對應的資訊)。

2.6.contains:判斷指定的對象是否存在于一級緩存中。

2.7.flush:重新整理一級緩存中的内容使其與資料庫保持一緻。

3.二級緩存的概念

3.1.應用的場景:有些常用的資料,我們在以後Session緩存之後,也希望在其他Session使用而不用再次緩存。

3.2.二級緩存是在每個Session中公用的緩存。

3.3.二級緩存不是預設開啟的需要自己手動配置一共分為四步:

3.3.1.添加二級緩存對應的JAR包

3.3.2.在hibernate配置檔案中增加關于Provider類的描述

<!—指定二級緩存外部的實作類-->
<property name=”cache.provide_class” >net.sf.ehcache.hibernate.EhcacheProvider </property>
           

3.3.3.添加二級緩存的屬性配置檔案

1)将ehcache.xml配置檔案添加到src的目錄下

3.3.4.在需要被緩存的表的映射檔案中添加<cache />标簽

1)<cache usage=”read-only” />

2)如果存在一對多關系,在緩存一方時候也希望就多的一方緩存起來,則需要在一方的關系對象映射檔案中的集合屬性下添加<cache />标簽,不然Hibernate僅僅會緩存多放的OID。

3.4.<catche />标簽的詳細介紹

3.4.1.usage(緩存政策/事物模式):transactional、read-write、nonstrict-read-write、read-only

3.4.2.include:non-lazy(我們目前緩存目前對象并不緩存延遲加載的屬性)、all

3.4.3.region:名字自取,表示我們可以在ehcache.xml檔案中我們可以針對組或者單張表進行緩存政策的配置

4.一級緩存和二級緩存的差別

4.1.二級緩存也稱為全局緩存和應用級緩存,是适用于目前所有的會話,也是插拔式自己配置的緩存;一級緩存也被稱為Session緩存和會話緩存,是Hibernate預設的無法解除安裝和取消的。

4.2.二級緩存适用于:

4.2.1.很少修改的資料。

4.2.2.不是很重要的資料。

4.2.3.允許偶爾出現并發的資料。

4.2.4.不是被高并發的資料,參考的資料。

4.3.一級緩存适用于:

4.3.1.經常被修改的資料

4.3.2.絕對不允許出現并發通路的資料,如銀行的錢

4.3.3.與其他應用共享的資料

4.4.

Hibernater基礎之緩存下

5.總結

5.1.Hibernate的緩存能夠提高檢索效率。

5.2.Hibernate緩存分為一級緩存和二級緩存,一級緩存是會話級緩存,二級緩存是應用級緩存。

5.3.Hibernate緩存在提高索引效率的同時也增加了伺服器的消耗,是以注意緩存的使用政策。

繼續閱讀