81 подписчик
🗑Кэширование Redis для максимальной производительности в Spring Boot и Java
▪ Настройка приложения Spring Boot
Для начала создайте новое приложение Spring Boot с помощью Spring Initializr. Добавьте следующие зависимости:
• Web;
• JPA;
• Lombok;
• Redis.
Вы можете создать проект и импортировать его в любимую IDE.
▪ Настройка кэша Redis
Прежде чем использовать Redis в качестве кэша в приложении, его нужно настроить. Сначала добавьте следующие свойства в файл application.properties:
spring.redis.host=localhost
spring.redis.port=6379
Далее создайте класс конфигурации RedisCacheConfig:
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory(new RedisStandaloneConfiguration(redisHost, redisPort));
}
@Bean
public RedisCacheManager cacheManager() {
return RedisCacheManager.builder(jedisConnectionFactory()).build();
}
}
Этот класс включает поддержку кэширования и настраивает бины (объекты) JedisConnectionFactory и RedisCacheManager.
▪ Реализация сервисов с возможностью кэширования
Создадим простой сервис, работе которого поможет кэширование. В этом примере реализуем сервис для получения информации о пользователе из базы данных.
Сначала создадим сущность User:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
}
Теперь создадим интерфейс UserRepository:
public interface UserRepository extends JpaRepository<User, Long> {}
Далее создаем UserService:
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Cacheable(value = "users", key = "#id")
public User findById(Long id) {
return userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("User not found"));
}
}
Аннотация @Cacheable указывает на то, что результат метода findById должен быть кэширован. Атрибут value определяет имя кэша, а атрибут key — ключ кэша.
▪ Способы вытеснения кэша 👇
1 минута
4 июля 2023