溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于OSCache的應(yīng)用(三)

發(fā)布時(shí)間:2020-08-05 10:01:53 來源:ITPUB博客 閱讀:174 作者:94nidaye 欄目:編程語言

在實(shí)際應(yīng)用中除了JSP標(biāo)簽庫,還可以使用OSCache提供的Java API .下面我來介紹一個(gè)實(shí)用的Java類

[@more@]

在實(shí)際應(yīng)用中除了JSP標(biāo)簽庫,還可以使用OSCache提供的Java API .下面我來介紹一個(gè)實(shí)用的Java類 ,使用GeneralCacheAdministrator來建立,刷新和管理緩存.
應(yīng)用OSCache Java API的一般步驟:
1 建立一個(gè)**Bean的緩存類**Cache.
2 import com.opensymphony.oscache.general.*;import com.opensymphony.oscache.base.*;
3 建立一個(gè)**DAO類以便操作數(shù)據(jù)庫(也可將上兩項(xiàng)的內(nèi)容直接合并到這里).
4 在**Cache類里生成一個(gè)GeneralCacheAdministrator的實(shí)例admin用來管理緩存.
GeneralCacheAdministrator admin = new GeneralCacheAdministrator();
5 **Cache中的方法 如.clear(),flush().基本調(diào)用的為OSCache的 Java API.
6 在**Cache添加getBeans()和getBean()方法 以便獲取緩存中的實(shí)例對(duì)象.具體實(shí)現(xiàn)可參照上面的例子.
7 主要用到的GeneralCacheAdministrator的方法有
public Object getFromCache(String key) throws NeedsRefreshException; -- 從緩存中獲取一個(gè)key標(biāo)識(shí)的對(duì)象.
public Object getFromCache(String key, int refreshPeriod) throws NeedsRefreshException ; -- 從緩存中獲取一個(gè)key標(biāo)識(shí)的對(duì)象. refreshPeriod刷新周期,標(biāo)識(shí)此對(duì)象在緩存中保存的時(shí)間(單位:秒)

public void putInCache(String key, Object content) -- 存儲(chǔ)一個(gè)由Key標(biāo)識(shí)的緩存對(duì)象.
public void putInCache(String key, Object content, String[] groups) -- 存儲(chǔ)一個(gè)由Key標(biāo)識(shí)的屬于groups中所有成員的緩存對(duì)象.

public void flushEntry(String key) -- 更新一個(gè)Key標(biāo)識(shí)的緩存對(duì)象.
public void flushGroup(String group) --更新一組屬于groupr標(biāo)識(shí)的所有緩存對(duì)象.
public void flushAll() -- 更新所有緩存.

public void cancelUpdate(String key) --- 取消更新 只用于在處理捕獲的NeedsRefreshException異常并嘗試生成新緩存內(nèi)容失效的時(shí)候.
public void removeEntry(String key) ---從緩中移除一個(gè)key標(biāo)識(shí)的對(duì)象
public void clear() --- 清除所有緩存

eg.
------------
///采取補(bǔ)救措施的典型方案

String myKey = "myKey";
String myValue;
int myRefreshPeriod = 1000; //刷新周期1000秒
try {
//從Cache中獲得 要做類型轉(zhuǎn)換
myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);
} catch (NeedsRefreshException nre) {
try {
// Cache中沒有則從庫獲得數(shù)據(jù).
myValue = "This is the content retrieved.";
// 存放在Cache中 鍵值myKey
admin.putInCache(myKey, myValue);
} catch (Exception ex) {
// 嘗試恢復(fù)Cache中的內(nèi)容
myValue = (String) nre.getCacheContent();
// 如果Cache中的內(nèi)容沒有復(fù)原 則用這個(gè)終級(jí)方法
admin.cancelUpdate(myKey); //取消對(duì)myKey的更新 即類似數(shù)據(jù)回滾
}
}

///不采取補(bǔ)救措施的典型方案

String myKey = "myKey";
String myValue;
int myRefreshPeriod = 1000;
try {
//從Cache中獲得 要做類型轉(zhuǎn)換
myValue = (String) admin.getFromCache(myKey, myRefreshPeriod);
} catch (NeedsRefreshException nre) {
try {
// Cache中沒有則從庫獲得數(shù)據(jù).
myValue = "This is the content retrieved.";
// 存放在Cache中 鍵值myKey
admin.putInCache(myKey, myValue);
updated = true;
} finally {
if (!updated) {
// 如果Cache中的內(nèi)容更新出現(xiàn)異常 則用這個(gè)終級(jí)方法
admin.cancelUpdate(myKey); //取消對(duì)myKey的更新 即類似數(shù)據(jù)回滾
}
}
}

注意:
如果一個(gè)NeedsRefreshException出現(xiàn) 必須調(diào)用admin.putInCache或甚至admin.cancelUpdate來避免死鎖情況發(fā)生.
---------------

以上就是OSCache提供的最常用的一個(gè)實(shí)用Java類.OSCache還提供有很多API 這里只是給大家介紹了一點(diǎn)點(diǎn)的,算是拋磚引玉,在今后的開發(fā)和應(yīng)用過程中還需要大家一起去研究.

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI