Uso Práctico de Hashes
Ensamblaremos completamente nuestra aplicación y la probaremos utilizando Redis y Spring Boot. El caché acelerará significativamente el procesamiento de solicitudes y reducirá la carga en la base de datos.
Resumen breve del video
En nuestro programa, utilizamos la siguiente lógica: cuando un usuario es agregado a la base de datos principal, sus datos no se almacenan en caché porque aún no es necesario.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
El método createUser simplemente guarda el usuario en la base de datos.
Cuando se recibe una solicitud para obtener los datos de un usuario por ID, primero se verifica si la información está disponible en la caché de Redis. Esto ayuda a evitar consultas innecesarias a la base de datos si los datos ya están en caché.
@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
Thread.sleep(100);
return userRepository.findById(id).orElseThrow(
() -> new RuntimeException(String.format("User with this id: %d not found", id))
);
}
Mediante la anotación @Cacheable, se almacenan en caché los datos bajo la clave user-cache, que incluye el valor del id (user-cache:20 para un usuario con ID 20). Si los datos están en la caché, se recuperan y retornan. Si los datos no están en la caché, el método consulta la base de datos.
Al eliminar datos de la base de datos, es importante eliminarlos también de la caché para asegurar que la información permanezca consistente y no se utilicen datos desactualizados.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
El método deleteUser elimina al usuario de la base de datos y borra sus datos de la caché de Redis para evitar el uso de información desactualizada en futuras consultas.
Beneficios del almacenamiento en caché
Ahora viene la parte interesante: ¿por qué implementamos el almacenamiento en caché? Tras añadir la caché de Redis, las solicitudes se volvieron mucho más rápidas — ¡literalmente hasta 20 veces más rápidas! Esto se demuestra claramente en las capturas de pantalla a continuación.
Antes del almacenamiento en caché
Antes de implementar el almacenamiento en caché, cada solicitud iba directamente a la base de datos, lo que resultaba en retrasos significativos durante el procesamiento.
Después del almacenamiento en caché
Con el almacenamiento en caché implementado, la mayoría de las solicitudes ahora son gestionadas por Redis, lo que reduce significativamente el tiempo de respuesta.
Resumen
El caché con Redis nos ha permitido optimizar el rendimiento de la aplicación, acelerar el procesamiento de solicitudes y reducir la carga sobre la base de datos. Este enfoque es especialmente beneficioso para aplicaciones de alto tráfico donde la velocidad de procesamiento de solicitudes es crucial.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain how the @Cacheable and @CacheEvict annotations work in more detail?
What are some best practices for using Redis caching in Spring Boot applications?
How can I test if my cache is working correctly in my own project?
Awesome!
Completion rate improved to 3.33
Uso Práctico de Hashes
Desliza para mostrar el menú
Ensamblaremos completamente nuestra aplicación y la probaremos utilizando Redis y Spring Boot. El caché acelerará significativamente el procesamiento de solicitudes y reducirá la carga en la base de datos.
Resumen breve del video
En nuestro programa, utilizamos la siguiente lógica: cuando un usuario es agregado a la base de datos principal, sus datos no se almacenan en caché porque aún no es necesario.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
El método createUser simplemente guarda el usuario en la base de datos.
Cuando se recibe una solicitud para obtener los datos de un usuario por ID, primero se verifica si la información está disponible en la caché de Redis. Esto ayuda a evitar consultas innecesarias a la base de datos si los datos ya están en caché.
@Transactional
@Cacheable(value = "user-cache", key = "#id")
@SneakyThrows
public User getUserById(Long id) {
Thread.sleep(100);
return userRepository.findById(id).orElseThrow(
() -> new RuntimeException(String.format("User with this id: %d not found", id))
);
}
Mediante la anotación @Cacheable, se almacenan en caché los datos bajo la clave user-cache, que incluye el valor del id (user-cache:20 para un usuario con ID 20). Si los datos están en la caché, se recuperan y retornan. Si los datos no están en la caché, el método consulta la base de datos.
Al eliminar datos de la base de datos, es importante eliminarlos también de la caché para asegurar que la información permanezca consistente y no se utilicen datos desactualizados.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
El método deleteUser elimina al usuario de la base de datos y borra sus datos de la caché de Redis para evitar el uso de información desactualizada en futuras consultas.
Beneficios del almacenamiento en caché
Ahora viene la parte interesante: ¿por qué implementamos el almacenamiento en caché? Tras añadir la caché de Redis, las solicitudes se volvieron mucho más rápidas — ¡literalmente hasta 20 veces más rápidas! Esto se demuestra claramente en las capturas de pantalla a continuación.
Antes del almacenamiento en caché
Antes de implementar el almacenamiento en caché, cada solicitud iba directamente a la base de datos, lo que resultaba en retrasos significativos durante el procesamiento.
Después del almacenamiento en caché
Con el almacenamiento en caché implementado, la mayoría de las solicitudes ahora son gestionadas por Redis, lo que reduce significativamente el tiempo de respuesta.
Resumen
El caché con Redis nos ha permitido optimizar el rendimiento de la aplicación, acelerar el procesamiento de solicitudes y reducir la carga sobre la base de datos. Este enfoque es especialmente beneficioso para aplicaciones de alto tráfico donde la velocidad de procesamiento de solicitudes es crucial.
¡Gracias por tus comentarios!