Anotações para Trabalhar com Cache
Em vez de lidar manualmente com o cache, é possível utilizar anotações que gerenciam automaticamente o processo. Veja a seguir as anotações disponíveis.
Cache de Resultados
A anotação @Cacheable é aplicada a métodos cujos resultados devem ser armazenados em cache. Quando o método é chamado novamente com os mesmos parâmetros, o resultado é recuperado do cache.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
Neste exemplo, o método getUserById armazena em cache o resultado de uma consulta de usuário pelo seu ID em um cache chamado "usersCache". Se o método for chamado novamente com o mesmo userId, os dados são recuperados do cache em vez de executar a consulta no banco de dados.
Atualização do Cache
A anotação @CachePut atualiza o cache toda vez que o método é executado, independentemente de o resultado já ter sido armazenado em cache anteriormente.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
A anotação @CachePut é utilizada para atualizar o cache toda vez que o método updateUser é chamado. Isso é útil quando os dados são alterados e é necessário sincronizar o cache com as mudanças no banco de dados. O cache é atualizado com a chave correspondente ao ID do usuário.
Limpando o Cache
A anotação @CacheEvict é utilizada para remover dados do cache, como quando um usuário é excluído do banco de dados.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
Neste exemplo, o método deleteUser remove a entrada do cache com a chave igual a userId.
Operações de Cache Combinadas
A anotação @Caching permite que múltiplas operações de cache sejam realizadas em um único método, combinando @CachePut e @CacheEvict.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
Neste exemplo, o método updateUser atualiza simultaneamente o cache com o novo estado do usuário usando @CachePut e remove a entrada antiga do cache utilizando @CacheEvict. Isso é útil quando é necessário realizar múltiplas operações de cache ao mesmo tempo.
1. Quando utilizar @CacheEvict?
2. Qual é o propósito da anotação @CachePut?
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 the difference between @Cacheable, @CachePut, and @CacheEvict?
How do I choose which caching annotation to use for a specific method?
Are there any best practices for managing cache consistency in Spring?
Awesome!
Completion rate improved to 3.33
Anotações para Trabalhar com Cache
Deslize para mostrar o menu
Em vez de lidar manualmente com o cache, é possível utilizar anotações que gerenciam automaticamente o processo. Veja a seguir as anotações disponíveis.
Cache de Resultados
A anotação @Cacheable é aplicada a métodos cujos resultados devem ser armazenados em cache. Quando o método é chamado novamente com os mesmos parâmetros, o resultado é recuperado do cache.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
Neste exemplo, o método getUserById armazena em cache o resultado de uma consulta de usuário pelo seu ID em um cache chamado "usersCache". Se o método for chamado novamente com o mesmo userId, os dados são recuperados do cache em vez de executar a consulta no banco de dados.
Atualização do Cache
A anotação @CachePut atualiza o cache toda vez que o método é executado, independentemente de o resultado já ter sido armazenado em cache anteriormente.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
A anotação @CachePut é utilizada para atualizar o cache toda vez que o método updateUser é chamado. Isso é útil quando os dados são alterados e é necessário sincronizar o cache com as mudanças no banco de dados. O cache é atualizado com a chave correspondente ao ID do usuário.
Limpando o Cache
A anotação @CacheEvict é utilizada para remover dados do cache, como quando um usuário é excluído do banco de dados.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
Neste exemplo, o método deleteUser remove a entrada do cache com a chave igual a userId.
Operações de Cache Combinadas
A anotação @Caching permite que múltiplas operações de cache sejam realizadas em um único método, combinando @CachePut e @CacheEvict.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
Neste exemplo, o método updateUser atualiza simultaneamente o cache com o novo estado do usuário usando @CachePut e remove a entrada antiga do cache utilizando @CacheEvict. Isso é útil quando é necessário realizar múltiplas operações de cache ao mesmo tempo.
1. Quando utilizar @CacheEvict?
2. Qual é o propósito da anotação @CachePut?
Obrigado pelo seu feedback!