@CacheEvict(...) 和@CacheEvict(value, allEntries) 有什么区别?

What's the difference between @CacheEvict(...) and @CacheEvict(value , allEntries )?

我注意到一些源代码中有几行 @CacheEvict("Settings") 并且很好奇是否与 CacheEvict(value = "Settings" , allEntries = true )?

看看它的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.

如果您想查看实现细节,请查看Coffeine

当在没有key属性的情况下指定@CacheEvict时,所有方法参数都用于构造要驱逐的条目的键,因此

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

... 将逐出具有复合键 {foo, bar} 的条目。用于构造组合键的默认键生成器是 SimpleKeyGenerator,其中 returns SimpleKey 个实例保存对用于比较的方法参数的引用。

如果方法没有参数,默认键是SimpleKey.EMPTY

如果指定 key 属性,则不能将属性 allEntries 设置为 true;他们是互斥的。如果设置为 true 每次调用带注释的方法时都会删除缓存中的所有条目。

所以...

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

...无论方法参数如何,每次调用方法时都会清空Settings缓存。