Java for Beginner
675 subscribers
560 photos
156 videos
12 files
858 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
2. Caffeine

Caffeine – это высокопроизводительная библиотека кеширования в памяти, которая отличается от Ehcache максимальной скоростью работы и расширенными возможностями.

Нюансы работы с Caffeine

Стратегии удаления:
Кеш автоматически удаляет устаревшие или редко используемые записи.

Поддерживаются три механизма:
Удаление на основе времени (TTL).
Удаление на основе неактивности (time-to-idle).
Удаление при достижении максимального размера.

Caffeine.newBuilder()
.maximumSize(500) // Максимум 500 записей
.expireAfterWrite(10, TimeUnit.MINUTES) // Удаление через 10 минут
.expireAfterAccess(5, TimeUnit.MINUTES) // Удаление через 5 минут неактивности
.build();


Мониторинг:
Caffeine поддерживает метрики, что позволяет отслеживать использование кеша, количество попаданий и промахов.
@Bean
public CaffeineCacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("usersCache");
cacheManager.setCaffeine(Caffeine.newBuilder()
.recordStats() // Включаем статистику
.maximumSize(1000));
return cacheManager;
}


Ленивая загрузка данных:
Caffeine позволяет автоматически загружать данные при промахе кеша.
LoadingCache<Long, User> userCache = Caffeine.newBuilder()
.maximumSize(100)
.build(id -> loadUserById(id)); // Метод для загрузки данных


Ограничения:

Как и Ehcache, Caffeine работает только локально.
Подходит для небольших и средних объёмов данных.


Шаги настройки Caffeine-кеша

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>


Конфигурация Caffeine-кеша:
@Configuration
@EnableCaching
public class CaffeineCacheConfig {
@Bean
public CaffeineCacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("usersCache");
cacheManager.setCaffeine(Caffeine.newBuilder()
.initialCapacity(100)
.maximumSize(500)
.expireAfterWrite(10, TimeUnit.MINUTES)
.recordStats());
return cacheManager;
}
}
Теперь кеширование данных с Caffeine готово.


#Java #Training #Spring #Caffeine
Примеры использования кеша на примере Caffeine и Redis

1. Пример с использованием Caffeine

Допустим, у нас есть метод, который возвращает данные пользователя.
@Service
public class UserService {

@Cacheable("usersCache")
public User getUserById(Long id) {
System.out.println("Fetching user from database...");
// Имитация запроса к базе данных
return new User(id, "User" + id);
}

@CacheEvict(value = "usersCache", key = "#id")
public void updateUser(Long id, User user) {
System.out.println("Updating user in database...");
// Обновление в базе
}
}


Проверка:
Первый вызов getUserById(1L) загрузит данные из базы.
Повторный вызов вернёт данные из кеша.
Метод updateUser(1L, user) очистит устаревшие данные из кеша.
Вывод: Кеш на базе
Caffeine идеально подходит для небольших объёмов данных с высокой скоростью работы.

2. Пример с использованием Redis

Допустим, мы создаём приложение, где кеш хранится в Redis.
@Service
public class ProductService {

@Cacheable("productCache")
public Product getProductById(Long id) {
System.out.println("Fetching product from database...");
// Имитация запроса к базе данных
return new Product(id, "Product" + id);
}

@CacheEvict(value = "productCache", key = "#id")
public void updateProduct(Long id, Product product) {
System.out.println("Updating product in database...");
// Обновление в базе
}
}


Проверка:
При вызове getProductById(1L) данные сохраняются в Redis.
Повторный вызов с тем же ID возвращает данные из Redis без обращения к базе.
Метод updateProduct(1L, product) удаляет кешированные данные.


Преимущества Redis:
Данные доступны для всех экземпляров приложения в распределённой системе.
Redis поддерживает TTL (время жизни кеша), что удобно для управления устареванием данных.


#Java #Training #Spring #Caffeine #Redis