2011-08-09 69 views
1

我的業務流程如下:IBM的Websphere命令緩存失效

  1. 無效命令
  2. 獲取來自命令數據(數據庫操作,慢一點)

第二步將是許多併發訪問用戶。

現在,當一個命令處於無效狀態,並且用戶試圖獲取數據時,多個數據庫查詢開始執行,因爲執行速度稍慢。

有沒有什麼辦法可以阻止多次執行查詢?

換句話說,問題是:我們能否使命令的執行, 和取出由命令數據同步?

回答

0

是的,你可以做這樣的事情。

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; 
    } 
} 
+0

這將工作在分佈式環境? –

0

如果您使用的是動態緩存緩存命令和查詢是用戶相同,則該命令應得的第一次執行後緩存。

只有第一次執行應該命中數據庫,之後應該從緩存中提取數據直到緩存失效。

我通常使用Dynacache作爲IBM Websphere Commerce套件的一部分。 Websphere Commerce使用預定命令來檢查名爲CACHEIVL的表。 您將設置觸發器,當目標表發生更改時,會將失效標識插入到CACHEIVL中。

因爲你沒有計劃的動態緩存命令,您可以使用Websphere schedulers實現特定於你的使用情況的東西,

下面是使用動態緩存可緩存命令的example