2011-08-09 20 views
1

私のビジネスの流れは以下の通りです:IBM Websphereのコマンド・キャッシュの無効化

  1. は、コマンドから(少し遅くなるデータベース操作を、)データを取得し、コマンドを無効に

ステップ2は、多くの同時のアクセスになりますユーザー。

無効化されたコマンドでユーザーがデータをフェッチしようとすると、executeが少し遅くなるため、複数のデータベースクエリが実行を開始します。

この複数のクエリの実行を停止する方法はありますか?

つまり、次の質問があります。コマンド を実行し、コマンドからデータをSynchronizedとして取得できますか?

答えて

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スイートの一部としてDynacacheを使用します。 Websphere Commerceは、スケジュールされたコマンドを使用して、CACHEIVLという表を検査します。 ターゲット表が変更されたときに無効化IDをCACHEIVLに挿入するトリガーを設定します。

スケジュール動的キャッシングコマンドを持っていないので、あなたはここでWebsphere schedulers

を使用して、ユースケースに特定の何かを実装することができます動的キャッシングを使用してキャッシュ可能なコマンドのexampleです。

関連する問題