Annotationer til Arbejde med Cache
I stedet for manuelt at håndtere caching, kan du bruge annotationer, der automatisk styrer processen. Lad os se på de tilgængelige annotationer.
Caching af resultater
@Cacheable annotationen anvendes på metoder, hvis resultater skal caches. Når metoden kaldes igen med de samme parametre, hentes resultatet fra cachen.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
I dette eksempel gemmer getUserById metoden resultatet af en brugerforespørgsel efter deres ID i en cache kaldet "usersCache". Hvis metoden kaldes igen med samme userId, hentes dataene fra cachen i stedet for at udføre forespørgslen mod databasen.
Opdatering af cachen
@CachePut annotationen opdaterer cachen hver gang metoden udføres, uanset om resultatet tidligere var cacheret.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
Annotationen @CachePut bruges til at opdatere cachen hver gang updateUser-metoden kaldes. Dette er nyttigt, når data ændres, og det er nødvendigt at synkronisere cachen med ændringerne i databasen. Cachen opdateres med den nøgle, der svarer til bruger-ID'et.
Rydning af cache
Annotationen @CacheEvict bruges til at fjerne data fra cachen, for eksempel når en bruger slettes fra databasen.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
I dette eksempel fjerner deleteUser-metoden posten fra cachen med nøglen svarende til userId.
Kombinerede cache-operationer
@Caching-annotationen muliggør flere cache-operationer inden for en enkelt metode, hvor @CachePut og @CacheEvict kombineres.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
I dette eksempel opdaterer updateUser-metoden samtidig cachen med brugerens nye tilstand ved hjælp af @CachePut og fjerner den gamle post fra cachen ved hjælp af @CacheEvict. Dette er nyttigt, når der skal udføres flere cache-operationer på samme tidspunkt.
1. Hvornår ville du bruge @CacheEvict?
2. Hvad er formålet med @CachePut-annotationen?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.33
Annotationer til Arbejde med Cache
Stryg for at vise menuen
I stedet for manuelt at håndtere caching, kan du bruge annotationer, der automatisk styrer processen. Lad os se på de tilgængelige annotationer.
Caching af resultater
@Cacheable annotationen anvendes på metoder, hvis resultater skal caches. Når metoden kaldes igen med de samme parametre, hentes resultatet fra cachen.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
I dette eksempel gemmer getUserById metoden resultatet af en brugerforespørgsel efter deres ID i en cache kaldet "usersCache". Hvis metoden kaldes igen med samme userId, hentes dataene fra cachen i stedet for at udføre forespørgslen mod databasen.
Opdatering af cachen
@CachePut annotationen opdaterer cachen hver gang metoden udføres, uanset om resultatet tidligere var cacheret.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
Annotationen @CachePut bruges til at opdatere cachen hver gang updateUser-metoden kaldes. Dette er nyttigt, når data ændres, og det er nødvendigt at synkronisere cachen med ændringerne i databasen. Cachen opdateres med den nøgle, der svarer til bruger-ID'et.
Rydning af cache
Annotationen @CacheEvict bruges til at fjerne data fra cachen, for eksempel når en bruger slettes fra databasen.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
I dette eksempel fjerner deleteUser-metoden posten fra cachen med nøglen svarende til userId.
Kombinerede cache-operationer
@Caching-annotationen muliggør flere cache-operationer inden for en enkelt metode, hvor @CachePut og @CacheEvict kombineres.
@Caching(
put = { @CachePut(value = "usersCache", key = "#user.id") },
evict = { @CacheEvict(value = "usersCache", key = "#user.id") }
)
public User updateUser(User user) {
return userRepository.save(user);
}
I dette eksempel opdaterer updateUser-metoden samtidig cachen med brugerens nye tilstand ved hjælp af @CachePut og fjerner den gamle post fra cachen ved hjælp af @CacheEvict. Dette er nyttigt, når der skal udføres flere cache-operationer på samme tidspunkt.
1. Hvornår ville du bruge @CacheEvict?
2. Hvad er formålet med @CachePut-annotationen?
Tak for dine kommentarer!