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

最佳答案

如果在没有@CacheEvict属性的情况下指定key,则所有方法参数都将用于构造要逐出条目的键,因此

@CacheEvict("Settings")
public String doThing(String foo, Integer bar) {
    // ...
}


...将使用复合键{foobar}逐出该条目。用于构造复合键的默认键生成器是SimpleKeyGenerator,它返回SimpleKey实例,这些实例保存对方法参数的引用以进行比较。

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

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

所以...

@CacheEvict("Settings", allEntries = true)
public String doThing(String foo, Integer bar) {
    // ...
}


...每次调用方法时都会清空Settings缓存,而不管方法参数如何。

10-02 03:41