Sto provando a creare un jboss-cache per i dati che sono rilevanti solo per un breve periodo di tempo. Dopo questo tempo i dati dovrebbero essere scartati e la relativa memoria liberata.Come evitare che la regione JBoss-Cache venga espulsa?
La cache è organizzata in questo modo:
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
E la mia configurazione dei criteri di sfratto è simile al seguente:
<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>
Questo funziona: quando /my_region
ottiene più di 100 bambini, i bambini meno utilizzati di recente sono sfrattati in modo che la regione si riduca a 100 bambini.
Il problema con lo LRUPolicy
è che quando i nodi espulsi hanno figli, they're not completely removed, but marked with jboss:internal:uninitialized: null
instead. Questo comportamento ha senso per le entità che vengono memorizzate nella cache per evitare di recuperarle da una memoria persistente, ma non è adatto per le entità di memorizzazione nella cache che non sono persistenti e non saranno mai più accessibili.
Quindi, per rimuovere i nodi, ho creato un'estensione di LRUPolicy
che sovrascrive sfratto con rimuovere.
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
Questa nuova politica non lascia joss:internal:uninitialized: null
's dietro, ma rimuove il nodo /my_region
quando maxNodes
è raggiunto. Quando ho ripristinato il LRUPolicy
, ho notato che il nodo regione in realtà viene espulso e ottiene il tag unitialized
, ma i 100 bambini ancora utilizzati più di recente rimangono.
Come posso evitare che la regione stessa venga sfrattata? C'è un modo migliore per eseguire la rimozione anziché lo sfratto senza separare lo eviction from expiration?
Sto usando jboss-cache versione 1.3.0.SP4.
quale versione di jboss-cache? – skaffman
1.3.0.SP4, lo includerò nella domanda. – hvrauhal