有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您必须在CacheEvict注释中添加allEntries=true,如下所示,以便能够逐出缓存中的所有内容:

    @CacheEvict(value = "users", allEntries=true)

    allEntries的默认值为false