Как перезаполнить кеш после истечения срока действия?

Я читал о infinispan... Мне нужно использовать обычный кеш ванили, без кластеризации, без вторичного спящего кеша.

Я понимаю, что по истечении срока действия объекты в кеше будут уничтожены, но я не понимаю, как обновить эти объекты непосредственно перед их уничтожением. Я проверил события, и я не вижу ничего подобного.

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

Итак, как поместить новые значения в кэш до истечения срока его действия? Я предполагаю, что infinispan должен предоставить способ сделать это, или я что-то упустил? Возможно, эту логику следует реализовать с помощью таймера @Scheduler внутри @Singleton EJB.


person jacktrades    schedule 12.02.2013    source источник


Ответы (2)


Если вы не хотите, чтобы вещи в вашем кеше когда-либо истекали, установите отрицательное значение timeToLive для кеша, и они останутся навсегда. Или, если вам нужно, чтобы срок действия некоторых вещей истекал только в том случае, если они не использовались, например, для 5 секунд, затем установите для параметра maxIdle значение 5 секунд. При каждом чтении (cache.get()) этого ключа время начала maxIdle сбрасывается, поэтому данные никогда не удаляются из кеша, пока они используются достаточно часто. .

person mircea.markus    schedule 12.02.2013

У меня было плохое представление о Кэше.

Элементы кэша имеют время истечения срока действия, поэтому каждый проверяет, существует ли данный объект, если его нет, это означает, что срок его действия истек, поэтому пришло время загрузить это значение еще раз. Так что нет необходимости реализовывать таймер. Кроме того, кэш «очищается» по истечении срока действия данного элемента.

person jacktrades    schedule 12.02.2013