Ответ
Кэширование — это техника хранения копии данных или результатов вычислений во временном, но быстродоступном хранилище (кэше) для последующего их быстрого извлечения без необходимости повторного выполнения ресурсоемкой операции (обращения к БД, сложного расчета, сетевого запроса).
Цели: повышение производительности, снижение нагрузки на источник данных и уменьшение задержек.
Базовый пример in-memory кэша на Java:
// Простейший кэш на основе HashMap
Map<String, Object> cache = new HashMap<>();
public Object getData(String key) {
if (!cache.containsKey(key)) {
// Дорогая операция (запрос к БД, API-вызов)
Object data = loadDataFromSource(key);
cache.put(key, data);
}
return cache.get(key);
}
Пример с использованием библиотеки Caffeine:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
Cache<String, Object> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES) // TTL
.maximumSize(1000) // LRU-политика
.build();
public Object getData(String key) {
// Лямбда выполнится только при отсутствии значения в кэше
return cache.get(key, k -> loadDataFromSource(k));
}
Основные проблемы: инвалидация устаревших данных, обеспечение консистентности в распределенных системах, выбор политики вытеснения (LRU, LFU).