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

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

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

    道非道 非常道

    勤思、謹言、慎行、厚積、薄發

    統計

    web

    天圓

    經濟 政治 軍事

    鍵康

    [轉] osCache內部介紹

           轉自:http://blog.csdn.net/furthersun/archive/2008/09/19/2952329.aspx

    1、摘要
    本文檔介紹了如何在 Portlet 應用中使用 OSCache 進行頁面內容緩存和對象緩存,分析了 OSCache 的實現原理,并提出了一個用來緩存對象和頁面的簡單易用的方案。本文檔不涉及 OSCache 的安裝與配置的內容,相關內容請參考 OSCache 的 在線文檔 。

    2、 OSCache 簡介
    OSCache標記庫由OpenSymphony設計,它是一種開創性的緩存方案,它提供了在現有JSP頁面之內實現內存緩存的功能。OSCache是個一個被廣泛采用的高性能的J2EE緩存框架,OSCache還能應用于任何Java應用程序的普通的緩存解決方案。

    OSCache有以下特點:

    l      緩存任何對象:你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。

    l      擁有全面的API:OSCache API允許你通過編程的方式來控制所有的OSCache特性。

    l      永久緩存:緩存能被配置寫入硬盤,因此允許在應用服務器的多次生命周期間緩存創建開銷昂貴的數據。

    l      支持集群:集群緩存數據能被單個的進行參數配置,不需要修改代碼。

    l      緩存過期:你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認性能不能滿足需要時)。

    3、OSCache 緩存原理簡介 
                Cache Factory 
     
                Cache Proxy 
     
                Cache Map 
     
                Memory 
     
                Disk 
     

                Listeners 
     
                Cache Entry
     

    圖 3-1 OSCache 架構概覽

    Cache Factory :該實體負責獲得 Cache Proxy ,兼有一些對 Cache Proxy 的管理功能。對應到現在的 OSCache 實現中的類是: GeneralCacheAdministrator 和 ServletCacheAdministrator 。

    Cache Proxy :該實體是 Cache Map 的代理,它主要負責從 Cache Map 中取得 / 存儲指定的緩存對象,如果緩存對象過期,那么就將緩存刷新,并向指定的監聽者發送存 / 取事件。對應到現在的 OSCache 實現中的類是: Cache 和 ServletCache 。

    Cache Map :該實體存儲了所有的緩存實體,是一個 OSCache 專有的 Map 實現,它能根據指定的算法清除緩存,以及將緩存持久化到磁盤中。對應到現在的 OSCache 實現中的類是: FIFOCache , LRUCache 和 UnlimitedCache 。

    Listeners : OSCache 存 / 取事件的監聽者實體。對應到現在的 OSCache 實現中的類是: CacheEntryEventListener 和 CacheMapAccessEventListener 。

    Cache Entry :表示緩存對象的包裝實體,它包裝了緩存對象和刷新策略。對應到現在的 OSCache 實現中的類是: CacheEntry 。

    3.1  應用場景
    一個典型的“緩存對象”場景是:

    應用調用 Cache Factory 獲得 Cache Proxy ,然后應用將要緩存的對象以及刷新策略通過 Cache Proxy 存儲到 Cache Map 中,并通知各個 Listener 。

    一個典型的“取得緩存對象”的場景是:

    應用調用 Cache Factory 獲得 Cache Proxy ,然后給 Cache Proxy 的相應方法傳入要獲得的緩存對象的 key , Cache Proxy 會根據指定的刷新策略判斷緩存是否過期,如果緩存沒有過期,則返回緩存對象,如果緩存過期,則刷新緩存,并向應用層拋出需要刷新的異常( NeedsRefreshException ),應用如果收到此異常,將重新計算內容并將內容緩存。

    4、Web 應用中的緩存方案
    4.1  假定
    OSCache 現有的緩存刷新策略(超過指定時間后自動過期,超過指定日期后自動過期,按照克龍表達式的設定自動過期)不能滿足需求。現有應用要求:當數據源的部分內容更新后,能夠使相關緩存過期,展現頁面從數據源取得更新的內容顯示。

    4.2、方案應用場景
    該方案為下列場景提供了支持:

    1. 緩存整個 Response ,能夠定制刷新指定的 Response 。

    2. 緩存 JSP 頁面內容,能夠定制刷新指定的緩存內容。

    3. 緩存對象,能夠定制刷新指定的緩存對象。

    4.3、 配置
    4.3.1  配置 ***CacheFilter
    在 Web 應用的 web.xml 中添加下面的內容:

    < filter>

                  < filter-name>CacheFilter</filter-name>

                  < filter-class>

                         com.***.portal.oscache.***CacheFilter

                  </ filter-class>

                  < init-param>

                         < param-name>time</param-name>

                         < param-value>-1</param-value>

                  </ init-param>

                  < init-param>

                         < param-name>scope</param-name>

    定制這個 fileter 緩存的 response 的組
     
                         < param-value>application</param-value>

                  </ init-param>

                  <init-param>

                         <param-name>groups</param-name>

                         <param-value> landy </param-value>

                  </init-param>

           </ filter>

    < filter-mapping>

                  < filter-name>CacheFilter</filter-name>

                  < url-pattern>/ landy </ url-pattern>

           </ filter-mapping>
     

    注意:

    為了在部分數據更新時只刷新部分 Response , ***CacheFilter 比 OSCache 提供的 CacheFitler 增加了一個可配置的參數:“ groups ”,部署者可以通過這個參數配置這個 filter 所映射的 URLS 的組(通常同一個組的 URL 會從同時更新的數據源取數據),這樣當數據源某部分更新之后,我們就可以刷新從這部分數據源取數據的 URLs 。該配置項支持配置多個組,以逗號作為分隔符,如:“ group1,group2 ”。

    其他的配置項說明請參考 OSCache 在線文檔的 CacheFilter 配置部分 。

    4.4、緩存整個 Response
    OSCache 提供的 CacheFilter 能夠緩存 Response ,但不能供應用選擇性的刷新某些 Response ,而 ***CacheFilter 就能支持這一特性。

    4.4.1 使用方法
    您可以按照以下的方式刷新某一組( Filter 初始化參數中 groups 參數配置的內容)的 Responses:

    ServletCacheAdministrator admin = null;

    Filter 初始化參數中 scope 參數配置的內容 
    admin = ServletCacheAdministrator.getInstance(config

                               .getServletContext());

    Filter 初始化參數中 groups 參數配置的內容
    Cache cache = admin.getCache(httpRequest, cacheScope);

    cache. flushGroup(group);
     

    4.4.2   約束
    這種方案僅適用于普通的 web 應用,不適用于 Portlets 應用,因為在 Portlets 應用中,每個 Portlet 都是頁面上一個可插拔的組件,如果被緩存的 Response 代表的頁面中某個 Portlet 被刪除了,那么這個頁面產生的 Response 就會不一樣,而這時應用卻無法刷新緩存的 Response 。

    4.5、 緩存 JSP 頁面內容
    可以在 JSP 頁面中將要緩存的內容置于 <cache></cache> 標簽之間,當更新數據源的事件產生時,在處理事件的方法中加入如下代碼即可:

    ***OSCacheUtil.getInstance().flushGroup("group1");
     

    4.5.1 樣例
    我要緩存一個從數據源的 A 表取數據的 JSP 內容段,如下表所示:

    <oscache:cache key="foobar" scope="application" time="-1" groups="group1" >

    //business code

    Select * from table A and Display

    </oscache:cache>
     

    數據源更新了,在處理數據更新事件的代碼中,我加入下表的代碼:

    ***OSCacheUtil.getInstance().flushGroup("group1");
     

    這樣就可以刷新緩存的 group1 組的數據了。

    4.5.2  約束
    本方案在滿足了 4.1 描述的需求的條件下,僅支持選擇性的刷新存儲在 application 域( cache 標簽中 scope 屬性配置為 application )的緩存。為什么不支持選擇性的刷新 session 域的緩存呢?是因為數據更新的事件產生是隨機的,當數據更新事件發生時,我們無法得到 web 服務器中的每個 session ,所以不能支持選擇性的刷新 session 域的緩存。

    4.6、緩存對象
    可以在 web 應用的業務處理邏輯中將要緩存的對象采用如下的方式將對象緩存到 application 域中:

    ***OSCacheUtil.getInstance().putInCache(key, content, new String[]{“group1”});
     

    當更新數據源的事件產生時,在處理事件的方法中加入如下代碼即可:

    ***OSCacheUtil.getInstance().flushGroup("group1");
     

    4.6.1  約束
    同 4.5.2 一致。

    5、Demo
    5.1  方案框架
    包括 ***CacheFilter 和 ***OSCacheUtil 。


    5.2  測試用例(基于 portlet )
    用例 src :
    用例 ear :

    posted on 2009-07-07 15:22 星期五 閱讀(210) 評論(0)  編輯  收藏 所屬分類: opensymphony

    主站蜘蛛池模板: 久久久久亚洲AV无码专区首| 国产日韩AV免费无码一区二区| 亚洲人6666成人观看| 亚洲成人高清在线观看| 亚洲色中文字幕在线播放| 羞羞视频免费网站入口| 免费精品久久天干天干| 国产AV无码专区亚洲精品| 亚洲午夜精品一区二区公牛电影院 | 国产激情免费视频在线观看| 亚洲一区二区三区免费观看| 在线播放高清国语自产拍免费| 又粗又大又长又爽免费视频| 亚洲综合在线视频| 国内成人精品亚洲日本语音| 99久久精品免费视频| 日本大片在线看黄a∨免费| 亚洲综合久久夜AV | 亚洲精品第一综合99久久| 国产无遮挡又黄又爽免费网站| 无码免费午夜福利片在线| 亚洲午夜国产精品无码老牛影视| 亚洲免费视频播放| 免费观看的a级毛片的网站| 久久亚洲精品成人AV| 成年轻人网站色免费看| 亚洲嫩模在线观看| 二级毛片免费观看全程| 日韩亚洲国产高清免费视频| 亚洲成人在线网站| 欧洲黑大粗无码免费| 亚洲日本va在线观看| 久久国产精品一区免费下载| 亚洲综合丁香婷婷六月香| 亚洲国产午夜中文字幕精品黄网站| 老色鬼久久亚洲AV综合| 精品免费国产一区二区| 精品一卡2卡三卡4卡免费视频| 亚洲精品无码国产| 国产一级a毛一级a看免费视频| 在线观看亚洲人成网站|