我碰到了这个有趣的Spring Boot Cache驱逐场景,在该场景中,我使用@Cacheable("users")
使用no-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);
}
这是预期的行为吗?是否不应该只提及@CacheEvict(value =“ users”)来驱逐“用户”缓存中的所有条目?
最佳答案
您必须按如下所示在allEntries=true
批注中添加CacheEvict
以启用逐出缓存中的所有内容:
@CacheEvict(value =“ users”,allEntries = true)allEntries
的默认值为false
。