Uso Prático de Hashes
Vamos montar completamente nossa aplicação e testá-la usando Redis e Spring Boot. O cache irá acelerar significativamente o processamento das requisições e reduzir a carga sobre o banco de dados.
Resumo breve do vídeo
Em nosso programa, utilizamos a seguinte lógica: quando um usuário é adicionado ao banco de dados principal, seus dados não são armazenados em cache porque ainda não é necessário.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
O método createUser simplesmente salva o usuário no banco de dados.
Quando uma requisição chega para buscar os dados de um usuário pelo ID, primeiro verificamos se a informação está disponível no cache Redis. Isso ajuda a evitar consultas desnecessárias ao banco de dados caso os dados já estejam em cache.
@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))
);
}
Utilizando a anotação @Cacheable, os dados são armazenados em cache sob a chave user-cache, que inclui o valor do id (user-cache:20 para um usuário com ID 20). Se os dados estiverem no cache, eles são recuperados e retornados. Caso os dados não estejam no cache, o método consulta o banco de dados.
Ao excluir dados do banco de dados, é importante removê-los também do cache para garantir que as informações permaneçam consistentes e que dados desatualizados não sejam utilizados.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
O método deleteUser remove o usuário do banco de dados e limpa seus dados do cache Redis para evitar o uso de informações desatualizadas em consultas futuras.
Benefícios do Cache
Agora vem a parte interessante — por que implementamos o cache? Após adicionar o cache Redis, as requisições ficaram muito mais rápidas — literalmente até 20 vezes mais rápidas! Isso é claramente demonstrado nas capturas de tela abaixo.
Antes do Cache
Antes de implementar o cache, cada requisição ia diretamente ao banco de dados, resultando em atrasos significativos durante o processamento.
Após o Cache
Com o cache em funcionamento, a maioria das requisições agora é tratada pelo Redis, o que reduz significativamente o tempo de resposta.
Resumo
Cacheamento com Redis permitiu otimizar o desempenho da aplicação, acelerar o processamento das requisições e reduzir a carga sobre o banco de dados. Essa abordagem é especialmente benéfica para aplicações de alto tráfego, onde a velocidade de processamento das requisições é crucial.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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ático de Hashes
Deslize para mostrar o menu
Vamos montar completamente nossa aplicação e testá-la usando Redis e Spring Boot. O cache irá acelerar significativamente o processamento das requisições e reduzir a carga sobre o banco de dados.
Resumo breve do vídeo
Em nosso programa, utilizamos a seguinte lógica: quando um usuário é adicionado ao banco de dados principal, seus dados não são armazenados em cache porque ainda não é necessário.
@Transactional
public User createUser(User user) {
return userRepository.save(user);
}
O método createUser simplesmente salva o usuário no banco de dados.
Quando uma requisição chega para buscar os dados de um usuário pelo ID, primeiro verificamos se a informação está disponível no cache Redis. Isso ajuda a evitar consultas desnecessárias ao banco de dados caso os dados já estejam em cache.
@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))
);
}
Utilizando a anotação @Cacheable, os dados são armazenados em cache sob a chave user-cache, que inclui o valor do id (user-cache:20 para um usuário com ID 20). Se os dados estiverem no cache, eles são recuperados e retornados. Caso os dados não estejam no cache, o método consulta o banco de dados.
Ao excluir dados do banco de dados, é importante removê-los também do cache para garantir que as informações permaneçam consistentes e que dados desatualizados não sejam utilizados.
@CacheEvict(value="user-cache", key="#id")
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
O método deleteUser remove o usuário do banco de dados e limpa seus dados do cache Redis para evitar o uso de informações desatualizadas em consultas futuras.
Benefícios do Cache
Agora vem a parte interessante — por que implementamos o cache? Após adicionar o cache Redis, as requisições ficaram muito mais rápidas — literalmente até 20 vezes mais rápidas! Isso é claramente demonstrado nas capturas de tela abaixo.
Antes do Cache
Antes de implementar o cache, cada requisição ia diretamente ao banco de dados, resultando em atrasos significativos durante o processamento.
Após o Cache
Com o cache em funcionamento, a maioria das requisições agora é tratada pelo Redis, o que reduz significativamente o tempo de resposta.
Resumo
Cacheamento com Redis permitiu otimizar o desempenho da aplicação, acelerar o processamento das requisições e reduzir a carga sobre o banco de dados. Essa abordagem é especialmente benéfica para aplicações de alto tráfego, onde a velocidade de processamento das requisições é crucial.
Obrigado pelo seu feedback!