posts - 495,  comments - 11,  trackbacks - 0

          二級緩存

          ?????? 與Session相對的是,SessionFactory也提供了相應的緩存機制。SessionFactory緩存可以依據功能和目的的不同而劃分為內置緩存和外置緩存。

          ?????? SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的副本,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來的。SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。

          ?????? SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是數據庫數據的副本,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的二級緩存。

          ?????? Hibernate的二級緩存的實現原理與一級緩存是一樣的,也是通過以ID為key的Map來實現對對象的緩存。

          ?????? 由于Hibernate的二級緩存是作用在SessionFactory范圍內的,因而它比一級緩存的范圍更廣,可以被所有的Session對象所共享。

          二級緩存的工作內容

          ?????? Hibernate的二級緩存同一級緩存一樣,也是針對對象ID來進行緩存。所以說,二級緩存的作用范圍是針對根據ID獲得對象的查詢。

          ?????? 二級緩存的工作可以概括為以下幾個部分:

          ●?? 在執行各種條件查詢時,如果所獲得的結果集為實體對象的集合,那么就會把所有的數據對象根據ID放入到二級緩存中。

          ●?? 當Hibernate根據ID訪問數據對象的時候,首先會從Session一級緩存中查找,如果查不到并且配置了二級緩存,那么會從二級緩存中查找,如果還查不到,就會查詢數據庫,把結果按照ID放入到緩存中。

          ●?? 刪除、更新、增加數據的時候,同時更新緩存。

          二級緩存的適用范圍

          ?????? Hibernate的二級緩存作為一個可插入的組件在使用的時候也是可以進行配置的,但并不是所有的對象都適合放在二級緩存中。

          ?????? 在通常情況下會將具有以下特征的數據放入到二級緩存中:

          ●?? 很少被修改的數據。

          ●?? 不是很重要的數據,允許出現偶爾并發的數據。

          ●?? 不會被并發訪問的數據。

          ●?? 參考數據。

          ?????? 而對于具有以下特征的數據則不適合放在二級緩存中:

          ●?? 經常被修改的數據。

          ●?? 財務數據,絕對不允許出現并發。

          ●?? 與其他應用共享的數據。

          ?????? 在這里特別要注意的是對放入緩存中的數據不能有第三方的應用對數據進行更改(其中也包括在自己程序中使用其他方式進行數據的修改,例如,JDBC),因為那樣Hibernate將不會知道數據已經被修改,也就無法保證緩存中的數據與數據庫中數據的一致性。

          二級緩存組件

          ?????? 在默認情況下,Hibernate會使用EHCache作為二級緩存組件。但是,可以通過設置hibernate.cache.provider_class屬性,指定其他的緩存策略,該緩存策略必須實現org.hibernate.cache.CacheProvider接口。

          ?????? 通過實現org.hibernate.cache.CacheProvider接口可以提供對不同二級緩存組件的支持。

          ?????? Hibernate內置支持的二級緩存組件如表14.1所示。

          表14.1??? Hibernate所支持的二級緩存組件

          posted on 2009-07-19 21:23 jadmin 閱讀(51) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 吉安市| 平阳县| 长治市| 曲阳县| 两当县| 保靖县| 塔城市| 田阳县| 石景山区| 阳山县| 灵山县| 广西| 霍林郭勒市| 淳安县| 苍溪县| 大姚县| 开江县| 新乡县| 上蔡县| 霞浦县| 余干县| 乌审旗| 崇文区| 韶关市| 肃宁县| 华宁县| 兰溪市| 泽普县| 高密市| 尉犁县| 罗源县| 贡山| 浏阳市| 扎鲁特旗| 眉山市| 和硕县| 大兴区| 阿尔山市| 法库县| 缙云县| 雷州市|