Кэширование не работает без ключа, а метод не имеет аргументов? - PullRequest
1 голос
/ 30 октября 2019

Я столкнулся с этим интересным сценарием выселения 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") ?

1 Ответ

0 голосов
/ 30 октября 2019

Вы должны добавить allEntries=true в аннотации CacheEvict, как показано ниже, чтобы разрешить удаление всего содержимого в кэше:

@ CacheEvict (value = "users", allEntries = true)

значение по умолчанию allEntries равно false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...