Estoy tratando de crear un jboss-cache para los datos que solo son relevantes durante un corto período de tiempo. Después de ese tiempo, los datos deben descartarse y la memoria respectiva debe liberarse.¿Cómo evitar que la región JBoss-Cache sea desalojada?
La caché está organizado así:
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
y la configuración de mi política de desalojo se ve así:
<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>
Esto funciona: cuando /my_region
obtiene más de 100 niños, los niños utilizados menos recientemente son desalojados para que la región se reduzca a 100 niños.
El problema con el LRUPolicy
es que cuando los nodos desalojados tienen hijos, they're not completely removed, but marked with jboss:internal:uninitialized: null
instead. Este comportamiento tiene sentido para las entidades que se almacenan en caché para evitar recuperarlas de un almacenamiento persistente, pero no es adecuado para las entidades de almacenamiento en caché que no se conservan y nunca se volverá a acceder a ellas.
Por lo tanto, para eliminar los nodos, he creado una extensión de LRUPolicy
que anula el desalojo con la eliminación.
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
Esta nueva política no deja joss:internal:uninitialized: null
's detrás, pero elimina el nodo /my_region
cuando se alcanza maxNodes
. Cuando devolví el LRUPolicy
, me di cuenta de que el nodo de la región en sí mismo es desalojado y recibe la etiqueta unitialized
, pero los 100 últimos hijos que aún se usan permanecen.
¿Cómo puedo evitar que la región se desaloje? ¿Hay alguna forma mejor de eliminar en lugar de desalojar sin separar el eviction from expiration?
Estoy usando la versión 1.3.0.SP4 de jboss-cache.
¿qué versión de jboss-cache? – skaffman
1.3.0.SP4, lo incluiré en la pregunta. – hvrauhal