Найти Π² Π”Π·Π΅Π½Π΅
92 подписчика

πŸ—‘ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ 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 ΠΌΠΈΠ½ΡƒΡ‚Π°