我碰到了这个有趣的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

07-28 06:31