我的業務流程如下:IBM的Websphere命令緩存失效
- 無效命令
- 獲取來自命令數據(數據庫操作,慢一點)
第二步將是許多併發訪問用戶。
現在,當一個命令處於無效狀態,並且用戶試圖獲取數據時,多個數據庫查詢開始執行,因爲執行速度稍慢。
有沒有什麼辦法可以阻止多次執行查詢?
換句話說,問題是:我們能否使命令的執行, 和取出由命令數據同步?
我的業務流程如下:IBM的Websphere命令緩存失效
第二步將是許多併發訪問用戶。
現在,當一個命令處於無效狀態,並且用戶試圖獲取數據時,多個數據庫查詢開始執行,因爲執行速度稍慢。
有沒有什麼辦法可以阻止多次執行查詢?
換句話說,問題是:我們能否使命令的執行, 和取出由命令數據同步?
是的,你可以做這樣的事情。
public class Fetcher {
private static String data;
private long timestamp;
public synchronized String fetchData() {
String result="";
if (data!=null) {
result=data;
// let's invalidate too old data
if (new Date().getTime()-timestamp> 100000)
data=null;
} else {
DAO db = DAO.getConnection();
data = db.performQuery();
result=data;
}
return result;
}
}
如果您使用的是動態緩存緩存命令和查詢是用戶相同,則該命令應得的第一次執行後緩存。
只有第一次執行應該命中數據庫,之後應該從緩存中提取數據直到緩存失效。
我通常使用Dynacache作爲IBM Websphere Commerce套件的一部分。 Websphere Commerce使用預定命令來檢查名爲CACHEIVL的表。 您將設置觸發器,當目標表發生更改時,會將失效標識插入到CACHEIVL中。
因爲你沒有計劃的動態緩存命令,您可以使用Websphere schedulers實現特定於你的使用情況的東西,
下面是使用動態緩存可緩存命令的example。
這將工作在分佈式環境? –