Hibernate緩存策略

1、Hibernate緩存策略概述數據庫

什麼是緩存?緩存

  緩存是指爲了下降應用程序對物理數據源訪問的頻次,從而提升應用程序的運行性能的一種策略服務器

爲何使用緩存?session

  ORM框架訪問數據庫的效率直接影響應用程序的運行速度,提高和優化ORM框架的執行效率相當重要併發

  Hibernate的緩存是提高和優化Hibernate執行效率的重要手段,因此學會Hibernate緩存的使用和配置是優化的關鍵框架

   

2、Hibernate緩存策略——不使用緩存的問題ide

  觀察如圖代碼IO,發現了什麼?性能

  1.Hibernate緩存與session相關,同一個session第二次訪問同一個對象將使用緩存。優化

  2.在不一樣的session中屢次查詢同一個對象時,會執行屢次數據庫查詢。spa

  3.在一級緩存當中,持久化類的每一個實例都具備惟一的OID,也就是說同一個session兩次查一個對象時,第二次是不會再將對象保存在緩存當中的。

  

 

3、一級緩存介紹

介紹Hibernate一級緩存:

  1.Hibernate一級緩存又稱爲"Session緩存","會話級緩存"

  2.經過Session從數據庫查詢實體時把實體在內存中存儲起來,下一次查詢同一實體時再也不從數據庫獲取,而是從內存中獲取,這就是緩存

  3.一級緩存的生命週期和Session相同;Session銷燬,他也銷燬

  4.一級緩存中的數據可適用範圍在當前會話以內

 

Hibernate一級緩存的API

  1.一級緩存沒法取消,Hibernate默認使用一級緩存

  2.用兩個方法管理一級緩存:

    a.evict():用於將某個對象從Session的一級緩存中清除

    b.clear():用於將一級緩存中的全部對象所有清除

  3.一級緩存也有些時候會對程序的性能產生影響,由於在對數據庫進行增刪改的時候同時也要更新緩存

 

一級緩存注意問題:

  1.query.list()是不會使用一級緩存的

  2.query.iterate()會使用一級緩存,當緩存中有數據的時候,query.iterate()將全部對象的id查詢出來而後到緩存中將全部對象都查詢出來,若是緩存中沒有數據,query.iterate()則把對象從數據庫中一條一條的將數據查出來

 

4、二級緩存應用

二級緩存的配置步驟:

  一、添加二級緩存對應的jar包(commons-logging-1.1.3.jar ;  ehcache.jar.zip)

  二、在Hibernate的配置文件中添加Provider類的描述

  三、添加二級緩存的屬性配置文件(ehcache.xml)

  四、在須要被緩存的表所對應的映射文件中添加<cache/>標籤 

 

region="Employee(自定義命名)":

  在ehcache.xml文件中自定義配置:

    maxElementsInMemory="10000" 表示緩存中容許建立的最大對象數。

    eternal="false" 表示緩存中對象是否爲永久的。

    timeToIdleSeconds="120" 表示緩存數據鈍化時間(即對象在它過時前的空閒時間)。

    timeToLiveSeconds="120" 表示緩存數據生存時間(即對象在它過時前的生存時間)。

    overflowToDisk="true" 表示溢出以後是否存儲在硬盤上。

 

Hibernate4之後的配置:

  <!-- 配置二級緩存 -->

  <property name="hibernate.cache.use_second_level_cache">true</property>

  <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

 

5、一二級緩存對比及總結

二級緩存的介紹

  二級緩存又稱爲「全局緩存」、「應用級緩存」

  二級緩存中的數據可適用範圍是當前應用中的全部會話

  二級緩存是可插拔式緩存,默認是EHCache,還支持其餘二級緩存組件如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等

 

一般會將一下特徵的數據放入到二級緩存中

  不多被修改的數據

  不是很重要的數據,容許偶爾併發的數據

  不會被併發訪問的數據

  參考數據

 

  

總結:

  一、Hibernate的緩存能提升檢索效率

  二、Hibernate的緩存分爲一級緩存和二級緩存。一級緩存是會話級緩存,二級緩存是應用級緩存

  三、Hibernate的緩存在提升檢索的同時,也會增長服務器的消耗,因此要注意緩存的使用策略

相關文章
相關標籤/搜索