1

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

4

2 回答 2

3

只需看看它的Javadoc。您会注意到is
的默认值。所以不,这不是一回事。仅在每次执行操作时都需要新缓存时使用 。allEntriesfalse
allEntries = true

是否删除缓存内的所有条目。默认情况下,仅删除关联键下的值。

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

于 2019-02-27T21:06:44.090 回答
2

@CacheEvict不带key属性指定时,所有方法参数都用于构造要被驱逐的条目的键,所以

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

... 将使用复合键 { foo, bar} 逐出条目。用于构造复合键的默认键生成器是SimpleKeyGenerator,它返回SimpleKey包含对方法参数的引用的实例以进行比较。

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

如果您确实指定了属性,则allEntries无法设置该属性;它们是相互排斥的。如果将其设置为缓存中的所有条目,则每次调用带注释的方法时都将被删除。truekeytrue

所以...

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

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

于 2019-02-27T21:59:26.503 回答