В чем разница между @CacheEvict(...) и @CacheEvict(value, allEntries)?

Я заметил несколько строк @CacheEvict("Settings") в каком-то исходном коде, и мне было любопытно, делает ли он то же самое, что и CacheEvict(value = "Settings", allEntries = true)?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
970
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто взгляните на его Javadoc.
Вы заметите, что значение по умолчанию для allEntries равно false. Так что нет, это нет одно и то же.
Используйте allEntries = true только в том случае, если вам нужен свежий кеш каждый раз при выполнении операции.

Whether all the entries inside the cache(s) are removed. By default, only the value under the associated key is removed.

Если вы хотите увидеть детали реализации, просто посмотрите на Кофеин.

Ответ принят как подходящий

Когда @CacheEvict указан без атрибута key, все параметры метода используются для создания ключа для вытесняемой записи, поэтому

@CacheEvict("Settings")
public String doThing(String foo, Integer bar) {
    // ...
}

... удалит запись с составным ключом {foo, bar}. Генератор ключей по умолчанию, используемый для создания составного ключа, — это SimpleKeyGenerator, который возвращает экземпляры SimpleKey, которые содержат ссылки на параметры метода для сравнения.

Если метод не имеет параметров, ключ по умолчанию — SimpleKey.EMPTY.

Атрибут allEntries не может быть установлен на true, если вы укажете атрибут key; они взаимоисключающие. Если установлено значение true, все записи в кеше будут удаляться каждый раз при вызове аннотированного метода.

Так...

@CacheEvict("Settings", allEntries = true)
public String doThing(String foo, Integer bar) {
    // ...
}

... будет очищать кеш Settings каждый раз при вызове метода, независимо от параметров метода.

Другие вопросы по теме