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

时间:2019-02-27 21:02:05

标签: java spring-boot caching spring-framework-beans

我在某些源代码中注意到了几行@CacheEvict(“ Settings”),并且好奇是否与CacheEvict(value =“ Settings”,allEntries = true)一样?

2 个答案:

答案 0 :(得分:3)

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

  

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

如果要查看实施细节,只需查看Coffeine

答案 1 :(得分:1)

如果在没有SELECT OBJECTPROPERTY(OBJECT_ID(N'MyTable'),'TableHasPrimaryKey') 属性的情况下指定了@CacheEvict,则所有方法参数都将用于构造要逐出条目的键,因此

key

...将使用组合键{@CacheEvict("Settings") public String doThing(String foo, Integer bar) { // ... } foo}退出该条目。用于构造组合键的默认键生成器是bar,它将返回SimpleKeyGenerator个实例,这些实例保存了对方法参数的引用以进行比较。

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

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

所以...

true

...每次调用该方法时,无论方法参数如何,都将清空@CacheEvict("Settings", allEntries = true) public String doThing(String foo, Integer bar) { // ... } 缓存。