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

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

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

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

      最近開始重構公司一套手機論壇系統(為什么我不說wap論壇,是因為需要針對不同的手機瀏覽器,實現自動適配成wap、html以及wap2.0版本的頁面)。原系統存在架構層次不清晰(表現層全jsp,直接配合數據層獲取數據),訪問速度慢的問題。其使用的OR映射框架是Hibernate,鑒于Hibernate的一些不滿足需要情況下,我們在重構的時候換成了iBatis,為了加快訪問速度,采用了iBatis的緩存技術。

          iBatis的緩存配置比較簡單易懂,以我使用的iBatis2.3為例,做以下配置即可實現對某些查詢進行緩存:

          1、在sqlMap文件中加入cacheModel的配置:

        <cacheModel id="model-cache" type="MEMORY" >

         <flushInterval seconds="60"/>
         <flushOnExecute statement="insertProduct"/>
         <flushOnExecute statement="updateProduct"/>
         <flushOnExecute statement="deleteProduct"/>

         <property name="size" value="1000" />
        </cacheModel>

          這個地方要注意的是,如果在sqlMapConfig里面設置了useStatementNamespaces="true",那么上面的flushOnExecute中的statement里面需要帶上namespace,如<flushOnExecute statement="Product.insertProduct"/>,如果useStatementNamespaces="false",則可以直接按上面的寫。

         2、配置需要進行cache的sql statment:

          <statement id="getProductList" parameterClass="int" cacheModel="model-cache">
            select * from PRODUCT where PRD_CAT_ID = #value#
          </statement>

         配置好這兩步就可實現iBatis的緩存了,下面解釋一下含義:

         1步中,cacheModel的id屬性用于后面的statement引用,type屬性標識采用何種cache方式,可選的有:

     “MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController) 。MEMORY cache 實現使用 reference 類型來管理 cache 的行為。垃圾收集器可以根據 reference類型判斷是否要回收 cache 中的數據。MEMORY實現適用于沒有統一的對象重用模式的應用,或內存不足的應用。
     “LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController) 。LRU Cache 實現用“近期最少使用”原則來確定如何從 Cache 中清除對象。當 Cache溢出時,最近最少使用的對象將被從 Cache 中清除。使用這種方法,如果一個特定的對象總是被使用,它將保留在 Cache 中,而且被清除的可能性最小。對于在較長的期間內,某些用戶經常使用某些特定對象的情況(例如,在 PaginatedList 和常用的查詢關鍵字結果集中翻頁) ,LRU Cache 是一個不錯的選擇。  
     “FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController) 。FIFO Cache 實現用“先進先出”原則來確定如何從 Cache 中清除對象。當 Cache 溢出時,最先進入 Cache 的對象將從 Cache 中清除。對于短時間內持續引用特定的查詢而后很可能不再使用的情況,FIFO Cache 是很好的選擇。
     “OSCACHE” (com.ibatis.db.sqlmap.cache.oscache.OSCacheController)  。OSCACHE Cache 實現是OSCache2.0緩存引擎的一個 Plugin。它具有高度的可配置性,分布式,高度的靈活性。
           flushInterval 屬性是配置自動更新緩存的周期,可以是hours,minutes,seconds或milliseconds。這一點我測試了一下,設置的60秒更新,通過觀察日志,在60秒內,第一次查詢數據庫,之后iBatis會對同樣的sql查詢直接返回。超過60秒后的第一次查詢,又會執行一次查詢。這樣看了,這個更新的周期可理解為第一次同樣的查詢可維持在cache中的時長,超過這個時長的第一次查詢會觸發實際的數據庫操作。

          flushOnExecute這是標識什么時候觸發更新,statement的名字就是后面的statement的id。

          statement節中設置了cacheModel,就會把這個sql跟cache關聯起來。

          是不是很簡單呢,這里面我覺得比較關鍵的地方就是cacheModel的type選擇,一般來說用memory就可以了,但一些特殊的應用,需要根據情況需要配置不同的更適合的cache,以進一步提高查詢效率。


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/paulluo0739/archive/2009/06/10/4257144.aspx

    posted on 2010-06-29 21:55 rogerfan 閱讀(915) 評論(0)  編輯  收藏 所屬分類: 【開源技術】
    主站蜘蛛池模板: 在线免费观看中文字幕| 亚洲国产成人久久精品影视| 一级毛片免费在线| 亚洲天天做日日做天天欢毛片| 无码国产精品一区二区免费I6| 国产亚洲成在线播放va| 亚洲大成色www永久网站| 国产精品久久久久久久久久免费 | 成人免费观看一区二区| 天天综合亚洲色在线精品| 亚洲av无码乱码国产精品fc2| 成人午夜性A级毛片免费| 中文字幕无码日韩专区免费| 亚洲乱码一区二区三区国产精品| 久久亚洲国产成人影院网站| 又粗又大又黑又长的免费视频| 一级a性色生活片久久无少妇一级婬片免费放 | 成人性生交大片免费看无遮挡| 国产99精品一区二区三区免费 | 亚洲精品日韩中文字幕久久久| 国产区卡一卡二卡三乱码免费| 99久热只有精品视频免费看| 永久免费观看黄网站| 亚洲 欧洲 日韩 综合在线| 亚洲av无码潮喷在线观看| 国产成人无码a区在线观看视频免费| 日韩精品在线免费观看| 一级毛片在线免费视频| 亚洲欧美不卡高清在线| 亚洲精品在线播放| 亚洲成AV人片在WWW色猫咪| 大胆亚洲人体视频| 免费黄网在线观看| 免费人成在线观看69式小视频| 成人爽a毛片免费| 日本免费精品一区二区三区 | 美女被爆羞羞网站在免费观看| 亚洲国产成人九九综合| 亚洲综合成人网在线观看| 亚洲成A∨人片在线观看不卡| 亚洲精品乱码久久久久久不卡|