Слушатели событий выселения для кофеина или какой-либо 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 здесь тоже не помогут.