Слушатели событий выселения для кофеина или какой-либо JVM Cache API?

Ява 8 здесь. Есть ли какой-либо способ с инфраструктурой кэширования кофеина (или любой другой инфраструктурой, совместимой с JSR-107 в этом отношении), чтобы уведомлять, когда запись выгружается из кэша?

Может быть какой-то EvictionEventListener или что-то?

public class MyEvictionListener implements EvictionEventListener<String> {
    @Override
    public void onEvictionEvent(EvictionEvent eviction, String key) {
        // Now I have access to the String "key" that was evicted and
        // some information surrounding the eviction and I can do
        // whatever I want with this information....
    }
}

Есть ли что-нибудь подобное в кофеине, гуаве, хазелкасте (в основном "кеш-земля JVM") и т. Д.?

1 ответ

Решение

Выселение временем или пространством?

В JSR107 вы должны получить событие для первого, а не для второго. См. Раздел 8.4 спецификации "8.4. Вызов слушателей".

Все реализации JCache должны поддерживать выселение по времени, и вы узнаете об этом через javax.cache.event.CacheEntryExpiredListener<K, V>, Истечение срока может быть нетерпеливым или ленивым в соответствии с реализацией, элементы не обязательно исчезнут в момент, когда наступает их срок.

JCache позволяет реализациям расширять это с помощью пространства.

С Hazelcast вы можете сделать это

 <eviction size="50" max-size-policy="ENTRY_COUNT" eviction-policy="LRU"/>

отбрасывать элементы из кэша в соответствии с настраиваемым пространственным порогом. Однако, поскольку это зависит от реализации, для него нет события JCache.

Событие JCache EXPIRED создается системой и не может быть инициировано пользователем напрямую. Событие REMOVED предназначено только для действий, инициируемых пользователем, таких как cache.remove(k), Другие два вида CREATED и UPDATED здесь тоже не помогут.

Другие вопросы по тегам