java缓存逐出在没有键的情况下不工作,并且方法没有参数?
我偶然遇到了这个有趣的Spring引导缓存逐出场景,其中我有一个带@Cacheable("users")
的无arg方法,还有一个带@CacheEvict("users")
的方法
@Cacheable(value = "users")
public List<String> getUsers() {
return myRepo.getUsers();
}
@CacheEvict(value = "users")
public void createUser(User user) {
myRepo.createUser(user);
}
我的假设是,每当我调用createUser()
方法时,“用户”缓存将被逐出,下次我调用getUsers()
时,它将调用myRepo.getUsers()
。但我注意到“用户”缓存没有被逐出,而且myRepo.getUsers()
没有被调用
经过反复试验,我通过指定键来解决此问题,如下所示:
@Cacheable(value = "users", key="'users'")
public List<String> getUsers() {
return myRepo.getUsers();
}
@CacheEvict(value = "users", key="'users'")
public void createUser(User user) {
myRepo.createUser(user);
}
这是预期的行为吗?它不应该只提到@cacheexecute(value=“users”),就逐出“users”缓存中的所有条目吗
# 1 楼答案
您必须在
CacheEvict
注释中添加allEntries=true
,如下所示,以便能够逐出缓存中的所有内容:allEntries
的默认值为false