春季“ cacheNames”不适用于“键”

时间:2018-10-19 13:48:24

标签: java spring spring-boot caching redis

我正在尝试为这样的方法配置缓存:

@Cacheable(value = USER_ENTITY_1_CACHE, key = "#userId")
public List<MyEntity1> findEntities1(Long userId) {
//...
}

并且:

@Cacheable(value = USER_ENTITY_2_CACHE, key = "#userId")
public Set<MyEntity2> findEntities2(Long userId) 
{
    //..
}

@Cacheable(value = USER_ENTITY_2_CACHE, key = "#userId")
public Set<MyEntity2> findEntities2(Long userId, boolean deleted) 
{
    //..
}

为此驱逐:

@CacheEvict(cacheNames = USER_ENTITY_2_CACHE, key = "#userId", condition = "#userId != null")

不幸的是,当我使用相同的userId调用此方法中的任何一个时,第二个方法的结果将从第一个方法中缓存。这会导致投放问题和混乱。

例如,

java.util.LinkedHashSet cannot be cast to java.util.List

换句话说,当我先调用findEntities1然后又调用findEntities2时,不会调用findEntities2,而是从缓存中获取它,并因类强制转换异常而失败。如果我以相反的顺序调用它们,则同样的工作。 我真正想要的是这两个缓存USER_ENTITY_1_CACHE,USER_ENTITY_2_CACHE彼此都不了解,并存储了自己的方法调用。

我正在使用RedisCacheManager。

任何想法在这里可能出什么问题吗?

1 个答案:

答案 0 :(得分:1)

删除明确定义的密钥,然后尝试

密钥将基于基于的参数自动生成。

element.classList.add('item');