我在某些源代码中注意到了几行@CacheEvict(“ Settings”),并且好奇是否与CacheEvict(value =“ Settings”,allEntries = true)一样?
答案 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) {
// ...
}
缓存。