为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2022-07-14 10:23:46
我注意到一些源代码中有几行 @CacheEvict("Settings") 并且很好奇是否与 CacheEvict(value = "Settings" , allEntries = true ) 做同样的事情?
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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

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

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


查看完整回答
反对 回复 2022-07-14
?
九州编程

TA贡献1785条经验 获得超4个赞

当@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...每次调用方法时都会清空缓存,无论方法参数如何。


查看完整回答
反对 回复 2022-07-14
  • 2 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信