Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Uso Prático de Hashes | Cache com Redis e Spring Boot
Introdução ao Redis

bookUso 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.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

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

bookUso 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.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 4
some-alt