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.
5.總結
5.1.Hibernate的緩存能夠提高檢索效率。
5.2.Hibernate緩存分為一級緩存和二級緩存,一級緩存是會話級緩存,二級緩存是應用級緩存。
5.3.Hibernate緩存在提高索引效率的同時也增加了伺服器的消耗,是以注意緩存的使用政策。