@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
缓存。
我注意到一些源代码中有几行 @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
缓存。