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

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

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

    如何學好java

    如何學好java,其實很簡單,只要用心體會,慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Hibernate緩存分類

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

     
    Hibernate緩存分類:

    Session緩存,一級緩存.

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

    Hibernate的緩存范圍

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

    緩存的范圍分為3類:

    1.事務范圍
       事務范圍的緩存只能被當前事務訪問,每個事務都有各自的緩存,緩存內的數據通常采用相互關聯的對象形式.緩存的生命周期依賴于事務的生命周期,只有當事務結束時,緩存的生命周期才會結束.事務范圍的緩存使用內存作為存儲介質,一級緩存就屬于事務范圍.
    2.應用范圍
       應用程序的緩存可以被應用范圍內的所有事務共享訪問.緩存的生命周期依賴于應用的生命周期,只有當應用結束時,緩存的生命周期才會結束.應用范圍的緩存可以使用內存或硬盤作為存儲介質,二級緩存就屬于應用范圍.
    3.集群范圍
       在集群環境中,緩存被一個機器或多個機器的進程共享,緩存中的數據被復制到集群環境中的每個進程節點,進程間通過遠程通信來保證緩存中的數據的一致,緩存中的數據通常采用對象的松散數據形式.

      Hibernate的緩存管理

    一級緩存的管理:

      evit(Object obj)  將指定的持久化對象從一級緩存中清除,釋放對象所占用的內存資源,指定對象從持久化狀態變為脫管狀態,從而成為游離對象.
      clear()  將一級緩存中的所有持久化對象清除,釋放其占用的內存資源
      contains(Object obj) 判斷指定的對象是否存在于一級緩存中.
      flush() 刷新一級緩存區的內容,使之與數據庫數據保持同步.

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

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

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


    Hibernate的二級緩存的配置

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

    Hibernate的二級緩存功能是靠配置二級緩存插件來實現的,Hibernate為了集成這些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充當緩存插件與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.       <!-- 設置二級緩存插件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為緩存對象的最大數目, eternal設置是否永遠不過期,timeToIdleSeconds對象處于空閑狀態的最多秒數,timeToLiveSeconds對象處于緩存狀態的最多秒數 -->  
    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.        <!-- 設置該持久化類的二級緩存并發訪問策略 read-only read-write nonstrict-read-write transactional-->  
    10.        <cache usage="read-write"/>      
    11.    </class>  
    12.   
    13. </hibernate-mapping>  


    最近用上了,看看了,有什么不妥的地方,多謝指出.
    主站蜘蛛池模板: 日韩插啊免费视频在线观看| 九九热久久免费视频| 18禁止观看免费私人影院| 亚洲人JIZZ日本人| 任你躁在线精品免费| 亚洲国产成人一区二区精品区| 花蝴蝶免费视频在线观看高清版 | 亚洲成a人片在线不卡| 国产2021精品视频免费播放| 亚洲制服丝袜精品久久| 成年免费大片黄在线观看岛国 | 99在线免费视频| 亚洲精品国产成人片| 日本一道本不卡免费 | 国产成人精品亚洲| 国产成人aaa在线视频免费观看| 亚洲av永久无码天堂网| 日韩精品成人亚洲专区| 两个人日本WWW免费版 | 亚洲成在人线av| 最近中文字幕mv免费高清在线| 亚洲国产片在线观看| 国产老女人精品免费视频| 一级毛片在线播放免费| 亚洲AV综合色区无码一区| 999国内精品永久免费观看| 亚洲免费综合色在线视频| 亚洲国产精品无码久久青草| 美女巨胸喷奶水视频www免费| 亚洲精品高清久久| 国产精品成人四虎免费视频| 丁香花在线观看免费观看图片 | 亚洲av无码一区二区三区人妖 | 国产亚洲蜜芽精品久久| 亚洲精品乱码久久久久久按摩 | 免费人成年轻人电影| 女人隐私秘视频黄www免费| 亚洲欧洲精品久久| 亚洲高清无码专区视频| 无码av免费网站| 亚洲av永久中文无码精品|