<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í)很簡單,只要用心體會,慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Hibernate緩存分類

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

     
    Hibernate緩存分類:

    Session緩存,一級緩存.

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

    Hibernate的緩存范圍

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

    緩存的范圍分為3類:

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

      Hibernate的緩存管理

    一級緩存的管理:

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

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

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

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


    Hibernate的二級緩存的配置

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

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

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

    簡單介紹一下EHCache的配置
    hibernate.cfg.xml
    Xml代碼  收藏代碼
    1. <hibernate-configuration>  
    2.    <session-factory>  
    3.       <!-- 設(shè)置二級緩存插件EHCache的Provider類-->  
    4.       <property name="hibernate.cache.provider_class">  
    5.          org.hibernate.cache.EhCacheProvider  
    6.       </property>  
    7.       <!-- 啟動"查詢緩存" -->  
    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為緩存對象的最大數(shù)目, eternal設(shè)置是否永遠(yuǎn)不過期,timeToIdleSeconds對象處于空閑狀態(tài)的最多秒數(shù),timeToLiveSeconds對象處于緩存狀態(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è)置該持久化類的二級緩存并發(fā)訪問策略 read-only read-write nonstrict-read-write transactional-->  
    10.        <cache usage="read-write"/>      
    11.    </class>  
    12.   
    13. </hibernate-mapping>  


    最近用上了,看看了,有什么不妥的地方,多謝指出.
    主站蜘蛛池模板: 亚洲情a成黄在线观看| 99蜜桃在线观看免费视频网站| 亚洲一区二区观看播放| 亚洲欧美日韩综合俺去了| 免费国产高清毛不卡片基地| 一级毛片免费观看不收费| 午夜精品免费在线观看| 无码视频免费一区二三区| 国产成人综合久久精品免费| 亚洲色欲一区二区三区在线观看| 亚洲电影在线免费观看| 人碰人碰人成人免费视频| 中文字幕免费在线看线人| 亚洲AV成人潮喷综合网| 亚洲大片在线观看| 美女露隐私全部免费直播| 免费国产黄网站在线观看可以下载| 亚洲情a成黄在线观看动漫尤物| 看亚洲a级一级毛片| 日本免费高清视频| 久久国产成人精品国产成人亚洲| 亚洲国产亚洲综合在线尤物| 久久久久久国产a免费观看不卡| 免费黄色一级毛片| 亚洲黄色免费电影| 99精品全国免费观看视频..| 国产精品美女午夜爽爽爽免费| 亚洲AV中文无码乱人伦下载| 日韩在线视精品在亚洲| 亚洲伊人成无码综合网| 日韩在线视频免费| 亚洲国产精品久久久久婷婷软件 | 久久久久成人片免费观看蜜芽| 亚洲尹人九九大色香蕉网站| 好男人资源在线WWW免费| 亚洲av无码成人精品区在线播放| 亚洲午夜精品久久久久久app| 亚洲精品视频免费| 日本黄网站动漫视频免费| 国产精品亚洲五月天高清| 精品女同一区二区三区免费站|