Я пытаюсь создать jboss-кэш для данных, которые только релевантны в течение короткого промежутка времени. После того времени должны быть отброшены данные, и соответствующая память освобождена.
Кэш организован как это:
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
И моя конфигурация политики замещения похожа на это:
org.jboss.cache.eviction.LRUPolicy
5
100
1800
Это работает: когда /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 последний раз используемых детей все еще остается.
Как я могу предотвратить сам регион от того, чтобы быть выселенным? Там некоторый лучший путь состоит в том, чтобы сделать удаление вместо замещения, не разделяя замещение из истечения?
Я использую версию 1.3.0. SP4 jboss-кэша.
Вы просматривали репозиторий ошибок JBoss-Cache ?
Редактировать:
Взгляните на этот JBoss- Ошибка кеширования, кажется вполне актуальной:
https://jira.jboss.org/jira/browse/JBCACHE-921
Исправлено в 1.4.1.SP1