В чем разница между @CacheEvict (...) и @CacheEvict (value, allEntries)? - PullRequest
0 голосов
/ 28 февраля 2019

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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Когда @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 кэшировать каждый раз, когда вызывается метод, независимо от параметров метода.

0 голосов
/ 28 февраля 2019

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

Будь все записивнутри кеша (ов) удаляются.По умолчанию удаляется только значение под соответствующим ключом.

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

...