Junior
156
questionbank
Какой самый простой способ реализации кэширования?
Ответ от нейросети
sobes.tech AI
Самый простой способ реализации кэширования в Java на уровне приложения — использование HashMap или ConcurrentHashMap (для многопоточного доступа) в качестве кэша в памяти.
Пример с ConcurrentHashMap:
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
public class SimpleCache<K, V> {
private final ConcurrentHashMap<K, CacheEntry<V>> cache = new ConcurrentHashMap<>();
private final long ttl; // Time to Live in milliseconds
public SimpleCache(long ttl) {
this.ttl = ttl;
}
public V get(K key) {
CacheEntry<V> entry = cache.get(key);
if (entry == null) {
return null;
}
// Проверяем на истечение срока действия
if (System.currentTimeMillis() > entry.timestamp + ttl) {
cache.remove(key); // Удаляем устаревшую запись
return null;
}
return entry.value;
}
public void put(K key, V value) {
cache.put(key, new CacheEntry<>(value, System.currentTimeMillis()));
}
public void remove(K key) {
cache.remove(key);
}
private static class CacheEntry<V> {
final V value;
final long timestamp;
CacheEntry(V value, long timestamp) {
this.value = value;
this.timestamp = timestamp;
}
}
public static void main(String[] args) throws InterruptedException {
// Кэш с TTL 5 секунд
SimpleCache<String, String> cache = new SimpleCache<>(TimeUnit.SECONDS.toMillis(5));
cache.put("key1", "value1");
System.out.println("Получено (до истечения): " + cache.get("key1")); // value1
Thread.sleep(6000); // Ждем 6 секунд
System.out.println("Получено (после истечения): " + cache.get("key1")); // null
}
}
Этот пример демонстрирует базовое кэширование с поддержкой TTL (Time-To-Live). Более сложные сценарии требуют использования специализированных библиотек, таких как Ehcache или Caffeine, которые предоставляют продвинутые функции:
- Политики вытеснения (LRU, LFU и т.д.)
- Прозрачное чтение и запись (read-through, write-through)
- Инвалидация кэша по событиям
- Распределенное кэширование