Как избежать выселения региона 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);
Другие вопросы по тегам