Я столкнулся с этим интересным сценарием выселения Spring Boot Cache, где у меня есть метод no-arg с @Cacheable("users")
, и у меня есть другой метод с @CacheEvict("users")
.
@Cacheable(value = "users")
public List<String> getUsers() {
return myRepo.getUsers();
}
@CacheEvict(value = "users")
public void createUser(User user) {
myRepo.createUser(user);
}
Мое предположение - всякий раз, когда я вызываюcreateUser()
метод, кеш пользователей будет удален, и в следующий раз, когда я вызову getUsers()
, он вызовет myRepo.getUsers()
Но я заметил, что кэш «пользователей» не исключен и myRepo.getUsers()
не вызывается.
После проб и ошибок мне удалось исправить эту проблему, указав key следующим образом:
@Cacheable(value = "users", key="'users'")
public List<String> getUsers() {
return myRepo.getUsers();
}
@CacheEvict(value = "users", key="'users'")
public void createUser(User user) {
myRepo.createUser(user);
}
Это ожидаемое поведение? Разве он не должен удалять все записи в кеше "users", просто упоминая @ CacheEvict (value = "users") ?