1

初めてJCSを実装しています。

私の要件:キャッシュにデータを保存するメインメソッドを持つJavaクラスが1つあります。

最初のJavaクラスを使用して保存したディスクキャッシュから取得するメインメソッドを持つ2番目のJavaクラスがあります。

注意: 1. ディスク キャッシュ (JCS の) を使用したい。2. 別の JVM からデータを取得したい。3. 最初の Java クラスのメイン メソッドを実行するときは、データをディスク キャッシュに保存する必要があり、2 番目の Java クラスのメイン メソッドを実行するときは、最初のメソッドを使用してディスクに保存されているキャッシュからデータを取得します。 Java クラスのメイン メソッド。

クラス 1: メイン メソッド..

public static void main(String[] args) {
//   Initialize the JCS object and get an instance of the default cache region
    try {
        JCS cache = JCS.getInstance("default");

    String key = "key0";
    String value = "value0";

    cache.put(key, value);
    cache.put("vasu","dev");


    } catch (CacheException e) {
        e.printStackTrace();
    }
}

class2: メインメソッド

public static void main (String asd[]){
    try {
        JCS cache = JCS.getInstance("default");


    String cachedData = (String)cache.get("vasu");


//   Check if the retrieval worked
    if (cachedData != null) {
      // The cachedData is valid and can be used
      System.out.println("Valid cached Data: " + cachedData);
    }
    else
         System.out.println("Invalid cached Data: ");

    } catch (CacheException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

キャッシュ.ccf:

jcs.default=DISK_REGION
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLifeSeconds=3600
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsLateral=true

jcs.region.OUR_REGION=DISK_REGION
jcs.region.OUR_REGION.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.OUR_REGION.cacheattributes.MaxObjects=1000
jcs.region.OUR_REGION.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION.cacheattributes.UseMemoryShrinker=true
jcs.region.OUR_REGION.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.OUR_REGION.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.OUR_REGION.cacheattributes.MaxSpoolPerRun=500
jcs.region.OUR_REGION.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.OUR_REGION.elementattributes.IsEternal=false

jcs.auxiliary.DISK_REGION=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DISK_REGION.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DISK_REGION.attributes.DiskPath=c:/jcs/disk_region
jcs.auxiliary.DISK_REGION.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DISK_REGION.attributes.MaxKeySize=10000
jcs.auxiliary.DISK_REGION.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DISK_REGION.attributes.MaxRecycleBinSize=7500
4

1 に答える 1

1

2 つの変更を行い、上記のサンプル コードの期待される結果が達成されました。

コンソール -> 「有効なキャッシュ データ: dev」

私がしたこと

  1. デフォルトのキャッシュ領域の下にある cache.ccf に行を追加 -

    jcs.default.cacheattributes.DiskUsagePatternName=UPDATE
    
  2. クラス 1 の最後にスリープを追加: メイン メソッド

説明

  1. DiskUsagePatternデフォルトは SWAP です。これは、要素に到達したときにキャッシュ要素がディスクに書き込まれることを意味しMaxMemoryIdleTimeSecondsます。デフォルトは 60 * 120 秒のようです。DiskUsagePatternがの場合UPDATE、エレメントはキャッシュに追加されるときにディスクに書き込まれます。要素は同期的にキャッシュに書き込まれるのではなく、キューに追加されてすぐに書き込まれて返されます。そのため、誰かがディスク上で即時かつ信頼できる更新を探している場合は、そうDiskUsagePatternすべきではありUPDATEませんSWAP(デフォルト)。
  2. 上記のキューの要素は、デーモンとしてマークされたバックグラウンド スレッドによってすぐに処理されます。実際のディスク更新は、このバックグラウンド スレッドで行われます。そのため、このデーモン スレッドが実行されるまで少し時間が必要です。
于 2013-12-10T18:57:01.350 に答える