10.4.5. ExpirationAlgorithm
org.jboss.cache.eviction.ExpirationAlgorithm は絶対有効期限を基にノードをエビクトするポリシーです。 有効期限は org.jboss.cache.Node.put() メソッドを使用して表示されます。 org.jboss.cache.Node.put() メソッドは文字列キー expiration と絶対時間を java.lang.Long オブジェクトとして使用し、 値は UTC (協定世界時) 1970 年 1 月 1 日午前 0 時から経過した時間 (ミリ秒単位) で表示されます (java.lang.System.currentTimeMillis() によって提供される相対時間と同じです)。
このポリシーによって、 追加と削除に対し一定順序 (
O (1) ) が保証されます。 内部的に、 ノードの有効期限と FQN が含まれるソートされたセット (TreeSet) が保存され、 基本的にヒープとして機能します。
このポリシーが持つ設定パラメータは次の通りです。
expirationKeyName- エビクションアルゴリズムで使用されるノードキー名です。 設定のデフォルトはexpirationになります。maxNodes- このリージョンで許可されるノードの最大数になります。 0 は即時失効、 -1 は無制限を表します。
次の一覧は、 有効期限の表示方法とポリシーの適用方法を表しています。
Cache cache = DefaultCacheFactory.createCache();
Fqn fqn1 = Fqn.fromString("/node/1");
Long future = new Long(System.currentTimeMillis() + 2000);
// sets the expiry time for a node
cache.getRoot().addChild(fqn1).put(ExpirationConfiguration.EXPIRATION_KEY, future);
assertTrue(cache.getRoot().hasChild(fqn1));
Thread.sleep(5000);
// after 5 seconds, expiration completes
assertFalse(cache.getRoot().hasChild(fqn1));
ノードの有効期限はリージョンマネージャが
wakeUpIntervalSeconds ごとにウェイクアップする時のみチェックされるため、 エビクションは表示されている時間の数秒後に発生する可能性があります。