短期間のみ関連するデータのjboss-cacheを作成しようとしています。その後、データを破棄し、それぞれのメモリを解放する必要があります。
キャッシュは次のように構成されています。
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
そして、私の立ち退きポリシーの構成は次のようになります。
<attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
<attribute name="EvictionPolicyConfig">
<config>
<attribute name="wakeUpIntervalSeconds">5</attribute>
<region name="/my_region">
<attribute name="maxNodes">100</attribute>
<attribute name="timeToLiveSeconds">1800</attribute>
</region>
</config>
</attribute>
これは機能します/my_region
。100人を超える子供がいる場合、最も最近使用されていない子供が追い出され、地域は100人の子供に縮小されます。
の問題は、削除さLRUPolicy
れたノードに子がある場合、それらは完全には削除されず、jboss:internal:uninitialized: null
代わりに。でマークされることです。この動作は、永続ストレージからのフェッチを回避するためにキャッシュされたエンティティには意味がありますが、永続化されておらず、二度とアクセスされないエンティティのキャッシュには適していません。
したがって、ノードを削除するために、removeをLRUPolicy
使用してevictをオーバーライドする拡張機能を作成しました。
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
この新しいポリシーは、を残しませんが、に達するとノードをjoss:internal:uninitialized: null
削除します。戻ると、リージョンノード自体が実際に削除されてタグが付けられていることに気付きましたが、最近使用された100個の子がまだ残っています。/my_region
maxNodes
LRUPolicy
unitialized
地域自体が追い出されるのを防ぐにはどうすればよいですか?立ち退きを期限切れから分離せずに、立ち退きの代わりに削除を行うためのより良い方法はありますか?
jboss-cacheバージョン1.3.0.SP4を使用しています。