Сделайте что-нибудь, когда время putifabsent истекло [infinispan]

Введение

Это касается кеша infinispan, но я думаю, что это достаточно общий вопрос.

В моем кеше infinispan я ввожу элементы в кеш с помощью метода putIfAbsent и удаляю их с помощью метода удаления. (документ jboss здесь)

Основное поведение

Я могу помещать элементы в свой кеш и удалять элементы из кеша, используя идентификатор. Но если я не удалю элемент кеша явно, infinispan удалит его автоматически по истечении указанного срока жизни.

В моем методе удаления я запускаю некоторый пользовательский код перед удалением. Но когда я не вызываю метод удаления, infinispan удаляет запись из кеша из-за истечения предоставленного срока службы.

В этом сценарии автоматического удаления я не могу запустить свой собственный код, потому что это происходит под капотом. (от Infinispan). Итак, каков возможный путь? Следующий код, надеюсь, объяснит это немного подробнее.

Я верю, что я достаточно ясен. Пожалуйста, дайте мне некоторое представление. Спасибо.

void putToCache(String id){
   myCache.putIfAbsent(id,value,LIFESPAN_DURATION,timeUnit);
}

void removeFromCache(String id){
  //MY CUSTOM CODE - WANT TO RUN THIS IN LIFE SPAN DURATION EXPIRY ALSO
   myCache.remove(id);
}

person nilan59    schedule 02.11.2015    source источник
comment
Похоже, что Infinispan реализует некоторые функции типа прослушивателя, которые могут уведомлять ваши методы, когда происходит событие удаления — см. docs.jboss.org/infinispan/6.0/apidocs/org/infinispan/   -  person matt freake    schedule 02.11.2015
comment
На самом деле - это звучит сложнее, чем это. См. infinispan.org/docs/6.0.x/faqs/ - у вас нет гарантии, что срок его действия истечет по истечении тайм-аута   -  person matt freake    schedule 02.11.2015
comment
Поскольку вытеснение гарантированно произойдет только через некоторое время после истечения тайм-аута вытеснения, было решено, что менее удивительно не обеспечить обратный вызов, чем предоставить обратный вызов в этот более поздний момент. Я просто хочу уточнить это. Меня не волнует фактическое время удаления. Что я хочу, так это уведомление, когда это произойдет. Погода это происходит вовремя или после. Как вы думаете, это возможно. Делает ли слушатель выселения свою работу @disco   -  person nilan59    schedule 03.11.2015


Ответы (1)


Прежде чем перейти к ответу, я хочу уточнить между выселением и истечением срока действия.

Выселение

Выселение — это когда запись удаляется из контейнера в памяти из-за того, что она выходит за пределы настроенного максимального размера (max-entries). Выселение может быть включено только во время настройки и не контролируется во время выполнения, каким может быть истечение срока действия, см. здесь. Обратите внимание, что вытеснение никогда не удаляет запись из хранилища, если она у вас настроена, поэтому вы не просто потеряете запись из-за того, что у вас слишком много записей, если вы этого не хотите.

В Infinispan 7 и более ранних версиях есть прослушиватель Eviction, как вы уже обнаружили, и возбужденное событие будет быть этим.

Срок действия

Срок действия определяет, что запись удаляется после периода бездействия или установленной продолжительности. Это можно настроить с помощью конфигурации или переопределить настроенное значение с помощью API, как в примере.

Теперь, чтобы ответить на ваш вопрос, событие Infinispan Expiration было добавлено с Infinispan 8. Подробнее см. здесь. Обратите внимание, что важной частью является то, что событие истечения срока действия будет запущено, удерживая блокировку для ключа, срок действия которого истекает (если ваш слушатель не определен как асинхронный). Это важно для обеспечения правильного заказа.

Также вы должны иметь в виду, что события истечения срока действия не гарантируют срабатывание точно по истечении срока действия записи. Скорее, событие запускается только при доступе к указанной записи с истекшим сроком действия или если поток жнеца с истекшим сроком действия находит запись с истекшим сроком действия. Жнец истечения срока действия по умолчанию запускается каждую минуту, вы можете отключить это или изменить время, изменив параметр конфигурации интервала истечения срока действия.

person Mudokonman    schedule 03.11.2015