J'essaye de créer un jboss-cache pour les données qui ne sont pertinentes que pour une courte période de temps. Après cette période, les données doivent être supprimées et la mémoire respective libérée.Comment éviter que la région JBoss-Cache ne soit expulsée?
Le cache est organisé comme ceci:
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
Et ma configuration de la politique d'expulsion ressemble à ceci:
<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>
Cela fonctionne: quand /my_region
obtient plus de 100 enfants, les enfants moins récemment utilisés sont expulsés pour que la région rétrécisse à 100 enfants.
Le problème avec le LRUPolicy
est que lorsque les nœuds expulsés ont des enfants, they're not completely removed, but marked with jboss:internal:uninitialized: null
instead. Ce comportement est logique pour les entités mises en cache afin d'éviter de les extraire d'un stockage persistant, mais il ne convient pas à la mise en cache des entités qui ne sont pas persistantes et qui ne seront jamais accessibles à nouveau. Donc, pour supprimer les noeuds, j'ai créé une extension de LRUPolicy
qui remplace expict avec remove.
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
Cette nouvelle politique ne laisse pas joss:internal:uninitialized: null
« s derrière, mais il supprime le nœud /my_region
lorsque maxNodes
est atteint. Lorsque j'ai mis le LRUPolicy
en arrière, j'ai remarqué que le nœud de région lui-même est effectivement expulsé et reçoit la balise unitialized
, mais les 100 derniers enfants utilisés restent toujours. Comment puis-je empêcher l'expulsion de la région elle-même?
Y a-t-il une meilleure façon de faire l'enlèvement au lieu de l'expulsion sans séparer le eviction from expiration? J'utilise jboss-cache version 1.3.0.SP4.
quelle version de jboss-cache? – skaffman
1.3.0.SP4, je vais l'inclure dans la question. – hvrauhal