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

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

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

    迷途書童

    敏感、勤學、多思
    隨筆 - 77, 文章 - 4, 評論 - 86, 引用 - 0
    數據加載中……

    OSCache分析

    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

    參考資料:

    [1] http:/www.opensymphony.com/oscache/

    posted on 2006-05-06 16:04 迷途書童 閱讀(7426) 評論(5)  編輯  收藏 所屬分類: java應用

    評論

    # re: OSCache分析  回復  更多評論   

    是原創的么?寫的挺好的,不過圖片看不到呢,要是可以看到圖片就完整了
    2006-05-07 00:08 | 綠色使者、綠色心情

    # re: OSCache分析  回復  更多評論   

    因為直接從word文檔里面拷出來的,所以畫的圖貼不上來,郁悶。
    2006-05-07 06:14 | 獨孤過客

    # re: OSCache分析  回復  更多評論   

    可直接上傳你的word文檔啊!
    2006-12-28 14:41 | winner

    # re: OSCache分析  回復  更多評論   

    http://www.5a520.cn 小說520網 用這個技術的.
    2008-05-29 21:26 | BT下載

    # re: OSCache分析  回復  更多評論   

    Java開源文檔(www.josdoc.com)希望轉載您的文章,如不同意請告知,謝謝!
    2009-04-30 10:24 | josdoc
    主站蜘蛛池模板: 亚洲国产黄在线观看| 亚洲va国产va天堂va久久| 怡红院免费全部视频在线视频| 久久亚洲精品国产精品黑人| 中文字幕av无码无卡免费| 国产午夜亚洲精品不卡电影| 一道本不卡免费视频| 亚洲欧洲日韩国产综合在线二区| 中文字幕乱码免费视频| 色天使亚洲综合一区二区| 亚洲AV日韩精品久久久久| 老司机永久免费网站在线观看| a级毛片100部免费观看| 亚洲精品无码国产片| 亚洲大尺度无码专区尤物| 免费无码又爽又刺激高潮 | 亚洲国产成人精品不卡青青草原| 欧洲乱码伦视频免费| 国产黄色片免费看| 亚洲av无码专区在线| 亚洲人成在线播放网站| 在线播放免费人成视频在线观看 | 久久狠狠躁免费观看2020| 亚洲AV日韩AV无码污污网站| 午夜亚洲国产理论秋霞| 亚洲A∨午夜成人片精品网站| 久久亚洲AV成人无码国产电影| 亚洲国产精品一区二区成人片国内 | 日本在线高清免费爱做网站| 九九免费观看全部免费视频| 亚洲另类无码一区二区三区| 亚洲午夜久久久精品影院| 亚洲区日韩区无码区| 免费无码黄动漫在线观看| 97在线观看永久免费视频| 免费h视频在线观看| 九九免费精品视频在这里| 亚洲av成人中文无码专区| 亚洲国产成人久久精品app| 久久精品国产亚洲AV麻豆不卡 | 精品亚洲成a人在线观看|