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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    ?????? 大家都知道,Hibernate是以JDBC為基礎(chǔ)實(shí)現(xiàn)的持久層組件,因而其性能肯定會(huì)低于直接使用JDBC來訪問數(shù)據(jù)庫。因此,為了提高Hibernate的性能,在Hibernate組件中提供了完善的緩存機(jī)制來提高數(shù)據(jù)庫訪問的性能。

    ?????? 什么是緩存

    ?????? 緩存是介于應(yīng)用程序和物理數(shù)據(jù)之間的,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)訪問的頻次從而提高應(yīng)用系統(tǒng)的性能。緩存思想的提出主要是因?yàn)閷?duì)物理數(shù)據(jù)的訪問效率要遠(yuǎn)遠(yuǎn)低于對(duì)內(nèi)存的訪問速度,因而采用了將部分物理數(shù)據(jù)存放于內(nèi)存當(dāng)中,這樣可以有效地減少對(duì)物理數(shù)據(jù)的訪問次數(shù),從而提高系統(tǒng)的性能。

    ?????? 緩存廣泛地存在于我們所接觸的各種應(yīng)用系統(tǒng)中,例如數(shù)據(jù)庫系統(tǒng)、Windows操作系統(tǒng)等,在進(jìn)行物理數(shù)據(jù)的訪問時(shí)無一例外地都使用了緩存機(jī)制來提高操作的性能。

    ?????? 緩存內(nèi)的數(shù)據(jù)是對(duì)物理數(shù)據(jù)的復(fù)制,因此一個(gè)緩存系統(tǒng)所應(yīng)該包括的最基本的功能是數(shù)據(jù)的緩存和讀取,同時(shí)在使用緩存的時(shí)候還要考慮緩存中的數(shù)據(jù)與物理數(shù)據(jù)的同步,也就是要保持兩者是一致的。

    ?????? 緩存要求對(duì)數(shù)據(jù)的讀寫速度很高,因此,一般情況下會(huì)選用內(nèi)存作為存儲(chǔ)的介質(zhì)。但如果內(nèi)存有限,并且緩存中存放的數(shù)據(jù)量非常大時(shí),也會(huì)用硬盤作為緩存介質(zhì)。緩存的實(shí)現(xiàn)不僅僅要考慮存儲(chǔ)的介質(zhì),還要考慮到管理緩存的并發(fā)訪問和緩存數(shù)據(jù)的生命周期。

    ?????? 為了提高系統(tǒng)的性能,Hibernate也使用了緩存的機(jī)制。在Hibernate框架中,主要包括以下兩個(gè)方面的緩存:一級(jí)緩存和二級(jí)緩存(包含查詢緩存)。Hibernate中緩存的作用主要表現(xiàn)在以下兩個(gè)方面:

    ●?? 通過主鍵(ID)加載數(shù)據(jù)的時(shí)候

    ●?? 延遲加載中

    一級(jí)緩存

    ?????? Hibernate的一級(jí)緩存是由Session提供的,因此它只存在于Session的生命周期中,也就是當(dāng)Session關(guān)閉的時(shí)候該Session所管理的一級(jí)緩存也會(huì)立即被清除。

    ?????? Hibernate的一級(jí)緩存是Session所內(nèi)置的,不能被卸載,也不能進(jìn)行任何配置。

    ?????? 一級(jí)緩存采用的是key-value的Map方式來實(shí)現(xiàn)的,在緩存實(shí)體對(duì)象時(shí),對(duì)象的主關(guān)鍵字ID是Map的key,實(shí)體對(duì)象就是對(duì)應(yīng)的值。所以說,一級(jí)緩存是以實(shí)體對(duì)象為單位進(jìn)行存儲(chǔ)的,在訪問的時(shí)候使用的是主關(guān)鍵字ID。

    ?????? 雖然,Hibernate對(duì)一級(jí)緩存使用的是自動(dòng)維護(hù)的功能,沒有提供任何配置功能,但是可以通過Session中所提供的方法來對(duì)一級(jí)緩存的管理進(jìn)行手工干預(yù)。Session中所提供的干預(yù)方法包括以下兩種。

    ●?? evict() :用于將某個(gè)對(duì)象從Session的一級(jí)緩存中清除。

    ●?? clear() :用于將一級(jí)緩存中的對(duì)象全部清除。

    ?????? 在進(jìn)行大批量數(shù)據(jù)一次性更新的時(shí)候,會(huì)占用非常多的內(nèi)存來緩存被更新的對(duì)象。這時(shí)就應(yīng)該階段性地調(diào)用clear()方法來清空一級(jí)緩存中的對(duì)象,控制一級(jí)緩存的大小,以避免產(chǎn)生內(nèi)存溢出的情況。具體的實(shí)現(xiàn)方法如清單14.8所示。

    ?????? 清單14.8??? 大批量更新時(shí)緩存的處理方法

    Session session = sessionFactory.openSession();

    Transaction tx = session.beginTransaction();

    ??

    for ( int i=0; i<100000; i++ ) {

    ??? Customer customer = new Customer(……);

    ??? session.save(customer);

    ??? if ( i % 20 == 0 ) {

    ??????? //將本批插入的對(duì)象立即寫入數(shù)據(jù)庫并釋放內(nèi)存

    ??????? session.flush();

    ??????? session.clear();

    ??? }

    }

    ??

    tx.commit();

    session.close();

    posted on 2009-07-19 21:18 jadmin 閱讀(94) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 99精品视频在线观看免费| 亚洲精品精华液一区二区| 在线免费观看伊人三级电影| 免费人妻无码不卡中文字幕18禁| 亚洲欧美日韩中文高清www777| 大地资源在线观看免费高清| ass亚洲**毛茸茸pics| 久久久久久久久免费看无码| 亚洲国产熟亚洲女视频| 国产精品免费_区二区三区观看| 精品国产日韩亚洲一区91| 伊在人亚洲香蕉精品区麻豆| 亚州**色毛片免费观看| 亚洲区小说区图片区QVOD| 一个人看的www免费视频在线观看| 亚洲成a人片在线观看无码| 久久久久久久岛国免费播放 | 中文字幕亚洲免费无线观看日本| 久久久久久久综合日本亚洲| 曰批全过程免费视频播放网站| 亚洲av无码不卡久久| 日日操夜夜操免费视频 | 久久久国产精品福利免费| 西西人体44rt高清亚洲| 国产91色综合久久免费| 亚洲精华国产精华精华液好用| 免费成人午夜视频| 暖暖在线视频免费视频| 亚洲国产熟亚洲女视频| 亚洲午夜激情视频| 最近新韩国日本免费观看| 亚洲人成77777在线观看网| 亚洲JIZZJIZZ中国少妇中文| 国产精品免费无遮挡无码永久视频| 亚洲av女电影网| 浮力影院第一页小视频国产在线观看免费| 日韩在线视精品在亚洲| 亚洲AV综合色区无码一区爱AV| 在线视频免费观看高清| jizz免费在线观看| 亚洲youjizz|