亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JAVA OSCache

系統(tǒng) 2989 0

OSCache安裝

?

  1. 解壓oscache-2.4-full.
  2. 把oscache-2.4.jar放到/WEB-INF/lib下.
  3. 要確保commons-logging.jar也在環(huán)境變量中.
  4. 把/etc/oscache.properties放入/WEB-INF/classes下.
  5. 把etc/oscache.tld也放在/WEB-INF/classes下.

?

OSCache應(yīng)用

?

一、JSP的應(yīng)用

?

應(yīng)用OSCache的標(biāo)簽:


1.在web.xml中:

Xml代碼 復(fù)制代碼
  1. < taglib > ? ??
  2. ???? < taglib-uri > oscache </ taglib-uri > ? ??
  3. ???? < taglib-location > /WEB-INF/classes/oscache.tld </ taglib-location > ? ??
  4. </ taglib > ???
      <taglib> 
??? <taglib-uri>oscache</taglib-uri> 
??? <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location> 
</taglib> 
    

?jsp中就可以<%@ taglib uri="oscache" prefix="os"%>這樣來引用了.

?

2.直接在jsp中加入OSCache的標(biāo)簽庫引用
<%@ taglib uri="/WEB- INF/classes/oscache.tld" prefix="os"%>

官方的標(biāo)簽庫

<%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache" %>

這樣就不用再把oscache.tld放在/WEB-INF/classes下了.

?

目前OSCache有5個(gè)標(biāo)簽.他們是cache, usecached, flush, addgroup, addgroups:

?

<cache></cache>

OSCache中最主要的標(biāo)簽.括起來的內(nèi)容將根據(jù)屬性的設(shè)置來緩存起來.第一次執(zhí)行的時(shí)候,OSCache會(huì)把cache標(biāo)簽中的jsp執(zhí)行并且緩存起來,以后再執(zhí)行的話,他會(huì)首先判斷緩存的內(nèi)容是否過期,如果過期那么會(huì)從新執(zhí)行并緩存.否則就直接從緩存中讀取.判定過期的條件如下:

?

1.緩存的內(nèi)容超過了屬性time所指定的時(shí)間.

2.不符合cron設(shè)置的時(shí)間間隔.

3.如果scope指定的范圍刷新的話,則認(rèn)為過期了.如Session過期.

?

屬性如下:
key?? : 緩存的Key,可以是任何的字符,用來尋找緩存的內(nèi)容用的.可以理解成HashMap中的Key.不能把2個(gè)要緩存的對(duì)象定義成一個(gè)名字,那樣后一個(gè)會(huì)覆蓋前一個(gè)的內(nèi)容.默認(rèn)情況,如果不指定Key的話,OSCache也會(huì)自動(dòng)生成一個(gè)Key,規(guī)則是請(qǐng)求的URI+當(dāng)前頁面的Query String.


scope? : 緩存的范圍.有2個(gè), application和session.默認(rèn)值是application.


time?? : 緩存內(nèi)容的時(shí)間.以秒為單位,默認(rèn)是3600秒.到了指定的時(shí)間,就會(huì)刷新緩存內(nèi)容.如果指定一個(gè)負(fù)數(shù)的話,意味著永遠(yuǎn)不會(huì)過期.


duration : 也是用來指定緩存內(nèi)容的時(shí)間,它和time屬性只能是2選1,它的特點(diǎn)是可以用Simple Data Format 或者是ISO-8601進(jìn)行日期格式化.


cron?? : 用萬年歷的形式指定緩存內(nèi)容何時(shí)過期的.它應(yīng)用的Unix的萬年歷形式,如("0 * * * *")


refresh? : 是個(gè)Boolean值,如果是True的話,則不管前面提到的過期檢查,都刷新.默認(rèn)情況是false.


mode?? : 設(shè)置這項(xiàng)為”silent”將防止把括起來的內(nèi)容輸出.這在你預(yù)加載緩存內(nèi)容而不愿顯示給用戶看到時(shí)很有用.


groups? : 可以提供一個(gè)以逗號(hào)分割的組名稱.如group="A, B".這將允許你以組的名義來操作他們,分組非常有用,比如你要緩存的內(nèi)容正好需要另外一個(gè)應(yīng)用程序的一部分或數(shù)據(jù),當(dāng)依賴的發(fā)生了改變,正好聯(lián)動(dòng)的可以使很多的組過期,進(jìn)而使與組發(fā)生關(guān)聯(lián)的緩存內(nèi)容得到更新.


language : 設(shè)置編碼方式.


refreshpolicyclass:指定自定義的類來處理緩存的內(nèi)容什么時(shí)候過期.這個(gè)類需要從 refreshpolicyparam com.opensymphony.oscache.web.WebEntryRefreshPolicy繼承.


refreshpolicyparam : 它和上面的是聯(lián)合使用的.是給refreshpolicyclass傳任意的參數(shù)的.指定這項(xiàng)的話,就必須有refreshpolicyclass,否則就不起作用.

?

Java代碼 復(fù)制代碼
  1. <os:cache?key= "<%=myKey%>" ?time= "1800" ?refresh= "<%=needRefresh%>" > ??
  2. <!--這里是要緩存的內(nèi)容--> ??
  3. </os:cache> ??
  4. <!--這里將myKey標(biāo)識(shí)的緩存內(nèi)容保持 30 分鐘,到期自動(dòng)刷新.如果needRefresh為 true 也會(huì)刷新(適合于更新內(nèi)容的即時(shí)刷新).?-->??
      <os:cache key="<%=myKey%>" time="1800" refresh="<%=needRefresh%>">
<!--這里是要緩存的內(nèi)容-->
</os:cache>
<!--這里將myKey標(biāo)識(shí)的緩存內(nèi)容保持30分鐘,到期自動(dòng)刷新.如果needRefresh為true也會(huì)刷新(適合于更新內(nèi)容的即時(shí)刷新). -->
    

?

Java代碼 復(fù)制代碼
  1. <os:cache?key= "<%=myKey%>" ?cron= "0?2?*?*?*" ?refresh= "<%=needRefresh%>" > ??
  2. <!--這里是要緩存的內(nèi)容--> ??
  3. </os:cache> ??
  4. <!-- ??
  5. 將myKey標(biāo)識(shí)的緩存內(nèi)容在每天的凌晨 2 時(shí)自動(dòng)刷新.如果needRefresh為 true 也會(huì)刷新(適合于更新內(nèi)容的即時(shí)刷新).舉到了這個(gè)例子,首先這五顆星的位置代表分,小時(shí),一個(gè)月中的天,月,一周中的天 ??
  6. 分:? 0 ~ 59 ??
  7. 小時(shí)?:? 0 ~ 23 ??
  8. 天(月)?:? 1 ~ 31 ??
  9. 月?:? 1 ~ 12 ,用英文全稱也可以.如January,?April ??
  10. 天(周):? 0 ~ 6 ( 0 代表Sunday, 1 代表Monday…? 6 代表Saturday) ??
  11. 舉個(gè)例子,比如我們想讓緩存的內(nèi)容在 4 月的晚上 11 : 45 分過期,可以這樣來寫 "45?23?*?April?*" ??
  12. -->??
      <os:cache key="<%=myKey%>" cron="0 2 * * *" refresh="<%=needRefresh%>">
<!--這里是要緩存的內(nèi)容-->
</os:cache>
<!--
將myKey標(biāo)識(shí)的緩存內(nèi)容在每天的凌晨2時(shí)自動(dòng)刷新.如果needRefresh為true也會(huì)刷新(適合于更新內(nèi)容的即時(shí)刷新).舉到了這個(gè)例子,首先這五顆星的位置代表分,小時(shí),一個(gè)月中的天,月,一周中的天
分: 0~59
小時(shí) : 0~23
天(月) : 1~31
月 : 1~12,用英文全稱也可以.如January, April
天(周): 0~6(0代表Sunday,1代表Monday… 6代表Saturday)
舉個(gè)例子,比如我們想讓緩存的內(nèi)容在4月的晚上11:45分過期,可以這樣來寫"45 23 * April *"
-->
    

?

<usecached />

需要放在cache標(biāo)簽中嵌套使用(一般配合try..catch使用)告訴他的上級(jí)標(biāo)簽是否應(yīng)用緩存的譯本. 則出現(xiàn)異常時(shí)將會(huì)替換包括上級(jí)標(biāo)簽在內(nèi)的所有內(nèi)容(提示:Missing cached content).

use="true|false" : 是否應(yīng)用的標(biāo)記. 默認(rèn)為True.一般省略.

Java代碼 復(fù)制代碼
  1. <os:cache> ??
  2. ??..html.. ??
  3. ?????????<%? try ?{%> ??
  4. ?????????......html ??
  5. ?????????<%} catch ?(Exception?e)?{%> ??
  6. ??????????????Inside? catch :?<os:usecached?use= "<%=isUsed%>" />?YES ??
  7. ?????????<%?}?%> ??
  8. </os:cache>???
      <os:cache>
  ..html..
         <% try {%>
         ......html
         <%}catch (Exception e) {%>
              Inside catch: <os:usecached use="<%=isUsed%>"/> YES
         <% } %>
</os:cache> 
    

?出現(xiàn)異常時(shí)的頁面輸出有兩種:
1. use=false
..html..
......html

Inside catch: YES
2. use=true
Missing cached content

?

<flush />

?

?

?

?

Java代碼 復(fù)制代碼
  1. package ?com.shoo.test.cache; ??
  2. ??
  3. import ?java.util.Date; ??
  4. ??
  5. import ?com.opensymphony.oscache.base.NeedsRefreshException; ??
  6. import ?com.opensymphony.oscache.general.GeneralCacheAdministrator; ??
  7. ??
  8. public ? class ?BaseCache? extends ?GeneralCacheAdministrator?{ ??
  9. ???? //?過期時(shí)間(單位為秒); ??
  10. ???? private ? int ?refreshPeriod; ??
  11. ???? //?關(guān)鍵字前綴字符; ??
  12. ???? private ?String?keyPrefix; ??
  13. ??
  14. ???? private ? static ? final ? long ?serialVersionUID?=?-4397192926052141162L; ??
  15. ??
  16. ???? public ?BaseCache(String?keyPrefix,? int ?refreshPeriod)?{ ??
  17. ???????? super (); ??
  18. ???????? this .keyPrefix?=?keyPrefix; ??
  19. ???????? this .refreshPeriod?=?refreshPeriod; ??
  20. ????} ??
  21. ??
  22. ???? //?添加被緩存的對(duì)象; ??
  23. ???? public ? void ?put(String?key,?Object?value)?{ ??
  24. ???????? this .putInCache( this .keyPrefix?+? "_" ?+?key,?value); ??
  25. ????} ??
  26. ??
  27. ???? //?刪除被緩存的對(duì)象; ??
  28. ???? public ? void ?remove(String?key)?{ ??
  29. ???????? this .flushEntry( this .keyPrefix?+? "_" ?+?key); ??
  30. ????} ??
  31. ??
  32. ???? //?刪除所有被緩存的對(duì)象; ??
  33. ???? public ? void ?removeAll(Date?date)?{ ??
  34. ???????? this .flushAll(date); ??
  35. ????} ??
  36. ??
  37. ???? public ? void ?removeAll()?{ ??
  38. ???????? this .flushAll(); ??
  39. ????} ??
  40. ??
  41. ???? //?獲取被緩存的對(duì)象; ??
  42. ???? public ?Object?get(String?key)? throws ?Exception?{ ??
  43. ???????? try ?{ ??
  44. ???????????? return ? this .getFromCache( this .keyPrefix?+? "_" ?+?key,? this .refreshPeriod); ??
  45. ????????}? catch ?(NeedsRefreshException?e)?{ ??
  46. ???????????? this .cancelUpdate( this .keyPrefix?+? "_" ?+?key); ??
  47. ???????????? throw ?e; ??
  48. ????????} ??
  49. ????} ??
  50. ??
  51. }??
      package com.shoo.test.cache;

import java.util.Date;

import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;

public class BaseCache extends GeneralCacheAdministrator {
	// 過期時(shí)間(單位為秒);
	private int refreshPeriod;
	// 關(guān)鍵字前綴字符;
	private String keyPrefix;

	private static final long serialVersionUID = -4397192926052141162L;

	public BaseCache(String keyPrefix, int refreshPeriod) {
		super();
		this.keyPrefix = keyPrefix;
		this.refreshPeriod = refreshPeriod;
	}

	// 添加被緩存的對(duì)象;
	public void put(String key, Object value) {
		this.putInCache(this.keyPrefix + "_" + key, value);
	}

	// 刪除被緩存的對(duì)象;
	public void remove(String key) {
		this.flushEntry(this.keyPrefix + "_" + key);
	}

	// 刪除所有被緩存的對(duì)象;
	public void removeAll(Date date) {
		this.flushAll(date);
	}

	public void removeAll() {
		this.flushAll();
	}

	// 獲取被緩存的對(duì)象;
	public Object get(String key) throws Exception {
		try {
			return this.getFromCache(this.keyPrefix + "_" + key, this.refreshPeriod);
		} catch (NeedsRefreshException e) {
			this.cancelUpdate(this.keyPrefix + "_" + key);
			throw e;
		}
	}

}

    

JAVA OSCache


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久频这里精品99香蕉久网址 | 国产精品久久久久久久9999 | 国产深夜福利19禁在线播放 | 国产青草视频免费观看97 | 亚洲欧美一区二区三区九九九 | 综合久久久久久中文字幕 | 欧美一级片网站 | 97久久久久 | 豆国产96在线 | 亚洲 | 欧美v亚洲v国产v | 亚洲爱爱视频 | 香蕉视频在线免费播放 | 青草草在线观看 | 日本a∨在线| 一本大道久久a久久综合 | 日日噜噜夜夜狠狠视频buoke | 久久在线观看免费视频 | 模特精品一区二区三区 | 久久精品视频在线播放 | 91国内在线国内在线播放 | a免费国产一级特黄aa大 | 福利视频不卡 | 99热这就是里面只有精品 | 国内在线观看 | 久久综合久久精品 | 午夜毛毛片 | 亚洲一区二区三区高清 | 亚洲国产精品久久卡一 | 中文字幕在线观看一区二区三区 | 不卡的在线视频免费观看 | 日本一二三区视频 | 国产综合日韩伦理 | 经典三级久久久久 | 国产成人午夜精品5599 | 久青草国产在视频在线观看 | 亚洲日韩色综合视频 | 成人久久久久 | 国产亚洲新品一区二区 | 大乳妇女bd视频在线观看 | 亚洲欧美综合在线观看 | 天天摸日日摸 |