Ответ
Caffeine — это высокопроизводительная in-memory библиотека кэширования для Java. Её стоит использовать, когда требуется максимальная скорость доступа к данным в памяти с гибкой политикой управления кэшем.
Ключевые сценарии использования:
- Высокая производительность: Алгоритмы Caffeine оптимизированы под современные многоядерные процессоры и часто превосходят
ConcurrentHashMapили Guava Cache. - Сложные политики истечения срока действия (TTL): Нужны гибкие настройки: по времени после записи/чтения, по размеру, комбинированные.
- Асинхронное обновление: Возможность асинхронно загружать данные в кэш, не блокируя потоки, ожидающие результат.
- Статистика: Встроенный сбор статистики хитов/промахов для тонкой настройки.
Пример создания и использования кэша:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;
// Создание кэша
Cache<String, User> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES) // Записи живут 10 минут
.maximumSize(1000) // Максимум 1000 записей
.recordStats() // Включить сбор статистики
.build();
// Использование: если ключа нет, вызывается функция для его загрузки
User user = cache.get("user:123", key -> userService.findById(key));
Альтернативы: Для простейшего кэша можно использовать ConcurrentHashMap. Для распределенного кэша между сервисами — Redis или Hazelcast.