<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如何學(xué)好java

    如何學(xué)好java,其實(shí)很簡(jiǎn)單,只要用心體會(huì),慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Hibernate緩存分類

    Posted on 2011-05-10 18:03 哈希 閱讀(197) 評(píng)論(0)  編輯  收藏 所屬分類: java 常用框架
    緩存是位于應(yīng)用程序與物理數(shù)據(jù)源之間,用于臨時(shí)存放復(fù)制數(shù)據(jù)的內(nèi)存區(qū)域,目的是為了減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的次數(shù),從而提高應(yīng)用程序的運(yùn)行性能.
      Hibernate在查詢數(shù)據(jù)時(shí),首先到緩存中去查找,如果找到就直接使用,找不到的時(shí)候就會(huì)從物理數(shù)據(jù)源中檢索,所以,把頻繁使用的數(shù)據(jù)加載到緩存區(qū)后,就可以大大減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源的訪問,使得程序的運(yùn)行性能明顯的提升.

     
    Hibernate緩存分類:

    Session緩存,一級(jí)緩存.

    SessionFactory的緩存分為內(nèi)置緩存和外置緩存.內(nèi)置緩存中存放的是SessionFactory對(duì)象的一些集合屬性包含的數(shù)據(jù)(映射元素?fù)?jù) 及預(yù)定義SQL語句等),對(duì)于應(yīng)用程序來說,它是只讀的.外置緩存中存放的是數(shù)據(jù)庫數(shù)據(jù)的副本,其作用和一級(jí)緩存類似.二級(jí)緩存除了以內(nèi)存作為存儲(chǔ)介質(zhì) 外,還可以選用硬盤等外部存儲(chǔ)設(shè)備.

    Hibernate的緩存范圍

    Hibernate的一級(jí)緩存和二級(jí)緩存都位于均位于持久層,且均用于存放數(shù)據(jù)庫數(shù)據(jù)的副本,最大的區(qū)別就是緩存的范圍各不一樣.

    緩存的范圍分為3類:

    1.事務(wù)范圍
       事務(wù)范圍的緩存只能被當(dāng)前事務(wù)訪問,每個(gè)事務(wù)都有各自的緩存,緩存內(nèi)的數(shù)據(jù)通常采用相互關(guān)聯(lián)的對(duì)象形式.緩存的生命周期依賴于事務(wù)的生命周期,只有當(dāng)事務(wù)結(jié)束時(shí),緩存的生命周期才會(huì)結(jié)束.事務(wù)范圍的緩存使用內(nèi)存作為存儲(chǔ)介質(zhì),一級(jí)緩存就屬于事務(wù)范圍.
    2.應(yīng)用范圍
       應(yīng)用程序的緩存可以被應(yīng)用范圍內(nèi)的所有事務(wù)共享訪問.緩存的生命周期依賴于應(yīng)用的生命周期,只有當(dāng)應(yīng)用結(jié)束時(shí),緩存的生命周期才會(huì)結(jié)束.應(yīng)用范圍的緩存可以使用內(nèi)存或硬盤作為存儲(chǔ)介質(zhì),二級(jí)緩存就屬于應(yīng)用范圍.
    3.集群范圍
       在集群環(huán)境中,緩存被一個(gè)機(jī)器或多個(gè)機(jī)器的進(jìn)程共享,緩存中的數(shù)據(jù)被復(fù)制到集群環(huán)境中的每個(gè)進(jìn)程節(jié)點(diǎn),進(jìn)程間通過遠(yuǎn)程通信來保證緩存中的數(shù)據(jù)的一致,緩存中的數(shù)據(jù)通常采用對(duì)象的松散數(shù)據(jù)形式.

      Hibernate的緩存管理

    一級(jí)緩存的管理:

      evit(Object obj)  將指定的持久化對(duì)象從一級(jí)緩存中清除,釋放對(duì)象所占用的內(nèi)存資源,指定對(duì)象從持久化狀態(tài)變?yōu)槊摴軤顟B(tài),從而成為游離對(duì)象.
      clear()  將一級(jí)緩存中的所有持久化對(duì)象清除,釋放其占用的內(nèi)存資源
      contains(Object obj) 判斷指定的對(duì)象是否存在于一級(jí)緩存中.
      flush() 刷新一級(jí)緩存區(qū)的內(nèi)容,使之與數(shù)據(jù)庫數(shù)據(jù)保持同步.

      二級(jí)緩存的管理:
      
       evict(Class arg0, Serializable arg1)  將某個(gè)類的指定ID的持久化對(duì)象從二級(jí)緩存中清除,釋放對(duì)象所占用的資源.
      
    Java代碼  收藏代碼
    1. sessionFactory.evict(Customer.class, new Integer(1));  

       evict(Class arg0)  將指定類的所有持久化對(duì)象從二級(jí)緩存中清除,釋放其占用的內(nèi)存資源.
      
    Java代碼  收藏代碼
    1. sessionFactory.evict(Customer.class);  

       evictCollection(String arg0)  將指定類的所有持久化對(duì)象的指定集合從二級(jí)緩存中清除,釋放其占用的內(nèi)存資源.
      
    Java代碼  收藏代碼
    1. sessionFactory.evictCollection("Customer.orders");  


    Hibernate的二級(jí)緩存的配置

    首先,不是所有的數(shù)據(jù)都適合放在二級(jí)緩存中,看一下,什么樣的數(shù)據(jù)適合放在二級(jí)緩存中來?什么樣的數(shù)據(jù)不適合放在二級(jí)緩存中來?
      下面這幾種情況就不適合加載到二級(jí)緩存中:
      1.經(jīng)常被修改的數(shù)據(jù)
      2.絕對(duì)不允許出現(xiàn)并發(fā)訪問的數(shù)據(jù)
      3.與其他應(yīng)用共享的數(shù)據(jù)
      下面這己種情況合適加載到二級(jí)緩存中:
      1.數(shù)據(jù)更新頻率低
      2.允許偶爾出現(xiàn)并發(fā)問題的非重要數(shù)據(jù)
      3.不會(huì)被并發(fā)訪問的數(shù)據(jù)
      4.常量數(shù)據(jù)
      5.不會(huì)被第三方修改的數(shù)據(jù)

    Hibernate的二級(jí)緩存功能是靠配置二級(jí)緩存插件來實(shí)現(xiàn)的,Hibernate為了集成這些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充當(dāng)緩存插件與Hibernate之間的適配器 .

    常用的二級(jí)緩存插件
    EHCache  org.hibernate.cache.EhCacheProvider
    OSCache  org.hibernate.cache.OSCacheProvider
    SwarmCahe  org.hibernate.cache.SwarmCacheProvider
    JBossCache  org.hibernate.cache.TreeCacheProvider

    簡(jiǎn)單介紹一下EHCache的配置
    hibernate.cfg.xml
    Xml代碼  收藏代碼
    1. <hibernate-configuration>  
    2.    <session-factory>  
    3.       <!-- 設(shè)置二級(jí)緩存插件EHCache的Provider類-->  
    4.       <property name="hibernate.cache.provider_class">  
    5.          org.hibernate.cache.EhCacheProvider  
    6.       </property>  
    7.       <!-- 啟動(dòng)"查詢緩存" -->  
    8.       <property name="hibernate.cache.use_query_cache">  
    9.          true  
    10.       </property>  
    11.    </session-factory>  
    12.  </hibernate-configuration>  


    ehcache.xml

    Xml代碼  收藏代碼
    1. <ehcache>  
    2.   <!-- maxElementsInMemory為緩存對(duì)象的最大數(shù)目, eternal設(shè)置是否永遠(yuǎn)不過期,timeToIdleSeconds對(duì)象處于空閑狀態(tài)的最多秒數(shù),timeToLiveSeconds對(duì)象處于緩存狀態(tài)的最多秒數(shù) -->  
    3.   <diskStore path="java.io.tmpdir"/>  
    4.     <defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>  
    5. </ehcache>  


    ****.hbm.xml

    Xml代碼  收藏代碼
    1. <?xml version="1.0" encoding='UTF-8'?>  
    2. <!DOCTYPE hibernate-mapping PUBLIC  
    3.                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    4.                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
    5.   
    6. <hibernate-mapping>  
    7.        
    8.    <class>  
    9.        <!-- 設(shè)置該持久化類的二級(jí)緩存并發(fā)訪問策略 read-only read-write nonstrict-read-write transactional-->  
    10.        <cache usage="read-write"/>      
    11.    </class>  
    12.   
    13. </hibernate-mapping>  


    最近用上了,看看了,有什么不妥的地方,多謝指出.
    主站蜘蛛池模板: 亚洲午夜福利在线观看| 亚洲av无码无在线观看红杏| 四虎国产精品永免费| 亚洲AV无码成人精品区蜜桃 | 一出一进一爽一粗一大视频免费的| 亚洲日韩中文字幕日韩在线| 91免费福利精品国产| 亚洲AV成人无码网天堂| 亚洲精品无码高潮喷水在线| 免费A级毛片无码无遮挡内射| 日本一区二区三区免费高清在线| 亚洲免费精彩视频在线观看| 国产精品无码素人福利免费| 久久国产免费一区二区三区| 亚洲精品久久久久无码AV片软件| 亚洲成AV人片天堂网无码| 在线免费一区二区| 久久久99精品免费观看| 日韩国产精品亚洲а∨天堂免| 日韩亚洲人成在线综合日本| 精品久久久久久久免费加勒比| 久久国产乱子伦免费精品| 一边摸一边爽一边叫床免费视频| 亚洲欧洲精品国产区| 在线精品亚洲一区二区小说| 免费看的一级毛片| 四虎在线免费视频| 在线观看免费黄网站| 国产午夜亚洲精品不卡免下载| 亚洲综合在线成人一区| 亚洲精品国产美女久久久| 免费在线观看毛片| 最近最新中文字幕完整版免费高清| 日本免费人成网ww555在线| 日韩一级片免费观看| 亚洲国产乱码最新视频| 久久精品国产亚洲av麻豆色欲| 国产亚洲情侣一区二区无| 国产一区二区三区在线观看免费| 成人免费激情视频| 99免费在线观看视频|