Anoteringar för Arbete med Cache
Istället för att hantera cachelagring manuellt kan du använda annoteringar som automatiskt hanterar processen. Här följer en översikt av tillgängliga annoteringar.
Cachelagring av resultat
Annoteringen @Cacheable används på metoder vars resultat ska cachelagras. När metoden anropas igen med samma parametrar hämtas resultatet från cachen.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
I det här exemplet cachar metoden getUserById resultatet av en användarfråga efter deras ID i en cache med namnet "usersCache". Om metoden anropas igen med samma userId, hämtas datan från cachen istället för att köra frågan mot databasen.
Uppdatering av cache
Annoteringen @CachePut uppdaterar cachen varje gång metoden körs, oavsett om resultatet har cachats tidigare.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
Annoteringen @CachePut används för att uppdatera cachen varje gång metoden updateUser anropas. Detta är användbart när data ändras och du behöver synkronisera cachen med ändringarna i databasen. Cachen uppdateras med nyckeln som motsvarar användar-ID.
Rensa cachen
Annoteringen @CacheEvict används för att ta bort data från cachen, till exempel när en användare tas bort från databasen.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
I detta exempel tar metoden deleteUser bort posten från cachen med nyckeln lika med userId.
Kombinerade cache-operationer
@Caching-annoteringen möjliggör flera cache-operationer inom en enda metod, genom att kombinera @CachePut och @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);
}
I detta exempel uppdaterar updateUser-metoden samtidigt cachen med användarens nya tillstånd med hjälp av @CachePut och tar bort den gamla posten från cachen med @CacheEvict. Detta är användbart när du behöver utföra flera cacheoperationer på samma gång.
1. När skulle du använda @CacheEvict?
2. Vad är syftet med @CachePut-annoteringen?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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?
Fantastiskt!
Completion betyg förbättrat till 3.33
Anoteringar för Arbete med Cache
Svep för att visa menyn
Istället för att hantera cachelagring manuellt kan du använda annoteringar som automatiskt hanterar processen. Här följer en översikt av tillgängliga annoteringar.
Cachelagring av resultat
Annoteringen @Cacheable används på metoder vars resultat ska cachelagras. När metoden anropas igen med samma parametrar hämtas resultatet från cachen.
@Cacheable(value = "usersCache", key = "#userId")
public User getUserById(String userId) {
return userRepository.findById(userId);
}
I det här exemplet cachar metoden getUserById resultatet av en användarfråga efter deras ID i en cache med namnet "usersCache". Om metoden anropas igen med samma userId, hämtas datan från cachen istället för att köra frågan mot databasen.
Uppdatering av cache
Annoteringen @CachePut uppdaterar cachen varje gång metoden körs, oavsett om resultatet har cachats tidigare.
@CachePut(value = "usersCache", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
Annoteringen @CachePut används för att uppdatera cachen varje gång metoden updateUser anropas. Detta är användbart när data ändras och du behöver synkronisera cachen med ändringarna i databasen. Cachen uppdateras med nyckeln som motsvarar användar-ID.
Rensa cachen
Annoteringen @CacheEvict används för att ta bort data från cachen, till exempel när en användare tas bort från databasen.
@CacheEvict(value = "usersCache", key = "#userId")
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
I detta exempel tar metoden deleteUser bort posten från cachen med nyckeln lika med userId.
Kombinerade cache-operationer
@Caching-annoteringen möjliggör flera cache-operationer inom en enda metod, genom att kombinera @CachePut och @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);
}
I detta exempel uppdaterar updateUser-metoden samtidigt cachen med användarens nya tillstånd med hjälp av @CachePut och tar bort den gamla posten från cachen med @CacheEvict. Detta är användbart när du behöver utföra flera cacheoperationer på samma gång.
1. När skulle du använda @CacheEvict?
2. Vad är syftet med @CachePut-annoteringen?
Tack för dina kommentarer!