@CacheEvict(...) 和 @CacheEvict(value , allEntries

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



当年话下
浏览 227回答 2
2回答

宝慕林4294392

只需看看它的Javadoc。您会注意到is的默认值。所以不,这不是一回事。仅在每次执行操作时都需要新缓存时使用 。allEntriesfalseallEntries = true是否删除缓存内的所有条目。默认情况下,仅删除关联键下的值。如果您想查看实现细节,只需查看Coffeine。

九州编程

当@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...每次调用方法时都会清空缓存,无论方法参数如何。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java