Ручная загрузка и удаление записей с помощью AsyncCache в Caffeine - PullRequest
0 голосов
/ 10 июля 2020

Я только начинаю работать с кешем кофеина и нуждаюсь в пояснении для нескольких случаев использования.

  1. Я вижу, что кофеин поддерживает функцию invalidate / invalidateAll только для синхронного кеша. Я хотел бы знать, почему функция недействительности не поддерживается для AsyncCache?
asyncCache.synchronous().invalidate(key) //supported for synchronous cache                                    
asyncCache.invalidate(key)// not supported for async cache
Также хотел уточнить, загружает ли метод put в AsyncCache запись в кеш асинхронно? Я хотел вручную добавить список записей в AsyncCache. Не уверен, что asyncCache.asMap (). PutAll () или итерация и добавление записей с помощью asyncCache.put () выполняет задание асинхронно?

Кто-нибудь может подробнее рассказать об этом?

1 Ответ

0 голосов
/ 11 июля 2020
  1. Поскольку метод доступен в представлении synchronous(), это будет только удобный метод по умолчанию, выполняющий тот же вызов. Поскольку invalidate не возвращает значение, его не нужно блокировать после того, как будущее было удалено из базового Map. Если требуется снятие блокировки, это можно сделать через synchronous().asMap().remove(key). Похоже, он не нес свой вес.

  2. AsyncCache сохраняет CompletableFuture в качестве значения записи. put будущего только блокирует достаточно долго, чтобы выполнить операцию ConcurrentHashMap, позволяя решать будущее независимо. Если future завершается как ошибка или нулевой результат, то обработчик whenComplete удаляет его из кеша. Таким образом, создание записи в карте выполняется синхронно, но загрузка будущего значения выполняется асинхронно.

Кофеин можно рассматривать как ограниченную карту с удобными API-интерфейсами для решения проблем с кэшированием. Он должен вести себя так, как вы могли бы ожидать при явном использовании ConcurrentHashMap. Следовательно, Cache<K, V> ~ = Map<K, V> и AsyncCache<K, V> ~ = Map<K, CompletableFuture<V>>. Когда API кеша слишком ограничены, использование представления asMap обеспечивает все функции, которые используют классы реализации интерфейса кеша.

...