OSCache標記庫由OpenSymphony設計,它是一種開創性的jsp定製標記應用,提供了在現有jsp頁面之內實現快速內存緩衝的功能。OSCache是一個廣泛採用的高性能的J2EE緩存框架,OSCache能用於任何Java應用程序的普通的緩存解決方案。OSCache有以下特點:緩存任何對象,你可以不受限制的緩存部門jsp頁面或HTTP請求,熱河java對象都可以緩存。擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。永久緩存-緩存能隨意的寫入硬盤,甚至能讓應用重啓。支持集羣-集羣緩存數據能被單個的進行參數配置,不需要修改代碼,包括可插入式的刷新策略。下面給出個樣例:
新建web項目,要實現OSCache緩存,需要導入commons-logging.jar,oscache-2.4.1.jar兩個包。
在jsp頁面首部引入標籤庫:
<%@taglib uri="http://www.opensymphony.com/oscache" prefix="cache"%>
在OSCache中最重要的標籤<cache:cache></cache:cache>
<cache:cache>
<%=new Date() %>
</cache:cache>
以上代碼就實現了OSCache緩存,當刷新界面時,其中時間是不會改變。
第二種,帶請求參數。
緩存的key將以請求的URL+查詢字串組成,如果你訪問/oscache/index.jsp?name=ttt和/oscache/index.jsp?name=ppp將得到兩份緩存,緩存默認放在application範圍,緩存時間默認爲3600秒,即1小時。
<cache:cache>
name=${param.name }
</cache:cache>
jsp中是以上代碼,我們訪問/oscache/index.jsp?name=ttt,當我們改變name=ppp,刷新界面是否會改變,會改變,因爲key爲請求的URL+查詢字串組成。
<cache:cache key="xxx">
name=${param.name }
</cache:cache>
當jsp是以上代碼時,我們訪問/oscache/index.jsp?name=ttt,當我們改變name=ppp,刷新界面,此時jsp內容會進行改變,因爲key已經指定xxx,key不會發生改變。
<cache:cache key="xxx" time="10">
name=${param.name }
</cache:cache>
當如上代碼所示,添加一個time屬性,time屬性爲過期時間。當我們改變屬性,在10秒內刷新界面不會發生改變。過去10秒後,再進行刷新界面,此時界面會發生改變。
<cache:cache key="xxx" time="50" refresh="${param.refresh }">
name=${param.name }
</cache:cache>
如上代碼,在time=30時,我們想進行刷新緩存,指定refresh屬性。當其值爲true時,可以進行刷新緩存。如http://localhost:8080/oscache/index.jsp?name=xxx&refresh=true
此時刷新界面,改變name值,會發生變化。
以上都是頁面的局部緩存。
下面介紹下全局緩存,指定什麼頁面進行緩存,通過filter實現:
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>7200</param-value>
</init-param>
<init-param>
<param-name>scope</param-name>
<param-value>application</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>/product/*</url-pattern>
</filter-mapping>
通過以上代碼,所有的路徑爲/product/*的請求路徑都會進行OSCache緩存,過期時間爲7200秒。
通過OSCache緩存,可以顯著提高web的性能,當一個用戶訪問一個頁面時,如果不加緩存,會頻繁的與數據庫進行交互,這樣效率就降低了,如果設置了OSCache緩存,在短時間頁面一般不會發生改變,所有可以設置OSCache緩存,直接從緩存直接讀取頁面,效率有了非常大的提供。
OSCache相比Hibenate的二級緩存,性能也是非常好的,Hibenate的二級緩存,緩存後數據後,需要通過EL表達式讀取到頁面上,而OSCache緩存直接將整個頁面數據緩存下來,只需要根據路徑讀取即可。