Как избежать выселения региона JBoss-Cache?
Я пытаюсь создать jboss-кеш для данных, которые актуальны только в течение короткого периода времени. По истечении этого времени данные должны быть отброшены, а соответствующая память освобождена.
Кеш организован так:
/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
вместо. Такое поведение имеет смысл для объектов, которые кэшируются, чтобы избежать их извлечения из постоянного хранилища, но оно не подходит для объектов кэширования, которые не сохраняются и никогда не будут доступны снова.
Итак, чтобы удалить узлы, я создал расширение LRUPolicy
который отменяет удалить.
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
Эта новая политика не оставляет joss:internal:uninitialized: null
позади, но это удаляет /my_region
узел, когда maxNodes
достигнуто Когда я ставлю LRUPolicy
назад, я заметил, что сам узел региона фактически выселяется и получает unitialized
тег, но 100 последних использованных детей все еще остаются.
Как я могу предотвратить выселение самого региона? Есть ли лучший способ сделать удаление вместо выселения, не отделяя выселение от истечения срока?
Я использую jboss-cache версии 1.3.0.SP4.
2 ответа
Вы смотрели в репозитории ошибок JBoss-Cache?
Редактировать:
Взгляните на эту ошибку JBoss-Cache, она кажется весьма актуальной:
https://jira.jboss.org/jira/browse/JBCACHE-921
Исправлено в 1.4.1.SP1
Программно вы можете установить регион кэша в качестве резидента:
this.cache.getNode(fqn).setResident(true);