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

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

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

    隨筆-4  評(píng)論-7  文章-0  trackbacks-0

    Hibernate在進(jìn)行數(shù)據(jù)讀取時(shí)會(huì)先在緩存里找,緩存中不存在時(shí)再去數(shù)據(jù)庫(kù)查詢,合理使用hibernate緩存能夠有效的利用內(nèi)存,減少物理數(shù)據(jù)庫(kù)調(diào)用的次數(shù).

     

    ORM緩存策略

    1.事務(wù)級(jí)緩存(session level cache)

    session生命周期的緩存,關(guān)閉session即消亡

    2.應(yīng)用級(jí)/進(jìn)程級(jí)緩存(sessionFactory level cache)

    某個(gè)應(yīng)用中的共享緩存,多個(gè)事務(wù)可以共享,在sessionFactory層實(shí)現(xiàn),所有sessionFactory創(chuàng)建的session可以共享.

    3.分布式緩存

    多個(gè)JVM共享的緩存,通過(guò)遠(yuǎn)程機(jī)制實(shí)現(xiàn)緩存數(shù)據(jù)同步,任意實(shí)例修改數(shù)據(jù),所有的JVM都要更新緩存.

     

    Hibernate數(shù)據(jù)緩存

    1.內(nèi)部緩存(session level)一級(jí)緩存

    是事務(wù)級(jí)的緩存,session中維護(hù)的一個(gè)Map,Map的key是包含了數(shù)據(jù)類型和id,從數(shù)據(jù)庫(kù)加載的數(shù)據(jù)都會(huì)進(jìn)入Map緩存中,通過(guò)session加載數(shù)據(jù)時(shí)會(huì)先在session緩存里找,一級(jí)緩存是session的private數(shù)據(jù),session實(shí)例消亡就清除了,在應(yīng)用中就保持在一次請(qǐng)求的開始和結(jié)束之間.

    一般由Hibernate自動(dòng)維護(hù),也支持手動(dòng)維護(hù)

    session.evit(Object obj) 將持久化對(duì)象從一級(jí)緩存中清除.

    session.clear()  清空一級(jí)緩存

    session.contains(Object obj) 判斷指定的對(duì)象是否存在于一級(jí)緩存中. 

    session.flush() 刷新一級(jí)緩存區(qū)的內(nèi)容,使緩存與數(shù)據(jù)庫(kù)數(shù)據(jù)保持同步. 

     

    2.二級(jí)緩存(sessionFactory level)

    包含了應(yīng)用級(jí)和分布式的緩存,由本sessionFactory的所有session實(shí)例共享,session操作時(shí)會(huì)先查一級(jí)緩存,然后查二級(jí)緩存,最后再查物理數(shù)據(jù)庫(kù).要使用二級(jí)緩存必須要進(jìn)行配置.

     

    適合用緩存的數(shù)據(jù)

    1.不會(huì)被其他應(yīng)用修改

    包括直接用JDBC修改等,因?yàn)槠渌麘?yīng)用修改了數(shù)據(jù)之后hibernate并不知道,不能自動(dòng)更新緩存,不過(guò)可以手動(dòng)更新緩存

    2.數(shù)據(jù)大小可以接受,畢竟內(nèi)存資源也不多

    3.數(shù)據(jù)更新頻率低(比如數(shù)據(jù)字典等常量數(shù)據(jù))

    4.可能被系統(tǒng)頻繁使用

    5.非關(guān)鍵的數(shù)據(jù)

    6.不會(huì)被并發(fā)訪問的數(shù)據(jù)

     

    常用的二級(jí)緩存插件

    EHCache  org.hibernate.cache.EhCacheProvider 

    OSCache  org.hibernate.cache.OSCacheProvider 

    SwarmCahe  org.hibernate.cache.SwarmCacheProvider 提供了分布式

    JBossCache  org.hibernate.cache.TreeCacheProvider 提供了分布式

     

    EHCache二級(jí)緩存配置方法

    1.啟用二級(jí)緩存首先要在hibernate.cfg.xml配置

    <hibernate-configuration>  

       <session-factory>  

          <!-- 配置二級(jí)緩存插件EHCache的Provider類-->  

          <property name="hibernate.cache.provider_class">  

             org.hibernate.cache.EhCacheProvider  

          </property>  

          <!-- 啟動(dòng)"查詢緩存" -->  

          <property name="hibernate.cache.use_query_cache">  

             true  

          </property>  

       </session-factory>  

     </hibernate-configuration> 

     

    2.然后配置cache的配置文件ehcache.xml

    <ehcache>  

      <!-- maxElementsInMemory為緩存對(duì)象的最大數(shù)目,

    eternal設(shè)置是否永遠(yuǎn)不過(guò)期,

    timeToIdleSeconds對(duì)象處于空閑狀態(tài)的最多秒數(shù),

    timeToLiveSeconds對(duì)象處于緩存狀態(tài)的最多秒數(shù),

    overflowtodisk內(nèi)存不足時(shí)是否啟用磁盤緩存 -->  

      <diskStore path="java.io.tmpdir"/>  

      <defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300"            timeToLiveSeconds="600" overflowToDisk="true"/>

    </ehcache>

     

    3.最后要在映射文件***.hbm.xml中指定實(shí)體的緩存同步策略

    <?xml version="1.0" encoding='UTF-8'?>  

    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  

    <hibernate-mapping>  

       <class>  

           <!-- 設(shè)置該持久化類的二級(jí)緩存并發(fā)訪問策略-->  

           <cache usage="read-write"/>

    <set name = "xxx">

    <cache usage="read-only" />

        </set>

       </class>

    </hibernate-mapping>  

     

    hibernate提供的緩存同步策略,可以在usage中設(shè)置

    read-only

    只讀

    nonstrict-read-write

    更新頻率不高

    read-write

    嚴(yán)格可讀寫

    transactional(Ecache不支持)

    事務(wù)型緩存

    posted on 2010-08-22 23:22 wkkyo 閱讀(446) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一区二区三区福利视频免费观看| 妞干网在线免费观看| 亚洲AV成人无码久久精品老人| 曰批视频免费40分钟试看天天| 在线亚洲午夜片AV大片| 免费人成视频在线观看视频| 成人片黄网站色大片免费观看APP| 亚洲国产精品日韩在线| 免费国产美女爽到喷出水来视频| 免费国产叼嘿视频大全网站| 久久乐国产综合亚洲精品| 亚洲伊人色欲综合网| 好爽又高潮了毛片免费下载 | 亚洲乱人伦精品图片| 免费人成网站7777视频| 一级毛片全部免费播放| WWW国产亚洲精品久久麻豆| 亚洲bt加勒比一区二区| 在线观看免费精品国产| 久久国产色AV免费观看| 免费人成视频在线观看免费| 亚洲国产精品张柏芝在线观看| 亚洲日本一区二区三区在线不卡| 日韩版码免费福利视频| 手机看片国产免费永久| 久久精品国产亚洲av品善| 亚洲国产高清人在线| 亚洲日韩VA无码中文字幕| 毛片在线看免费版| 国产精品区免费视频| 国产精品永久免费视频| 亚洲欧美国产日韩av野草社区| 亚洲成熟xxxxx电影| 亚洲精品97久久中文字幕无码| 成人黄软件网18免费下载成人黄18免费视频 | 亚洲一区二区成人| 国产福利电影一区二区三区,亚洲国模精品一区 | **俄罗斯毛片免费| 十八禁在线观看视频播放免费| 亚洲精华国产精华精华液网站| 亚洲美免无码中文字幕在线|