作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正尝试像这样为我的方法配置缓存:
@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。
你知道这里可能有什么问题吗?
最佳答案
删除显式定义的键并尝试
key 将根据参数自动生成。
@Cacheable(value = USER_ENTITY_1_CACHE)
public List<MyEntity1> findEntities1(Long userId) {
//...
}
And:
@Cacheable(value = USER_ENTITY_2_CACHE)
public Set<MyEntity2> findEntities2(Long userId)
{
//..
}
关于java - Spring "cacheNames"不适用于 "key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893693/
我正尝试像这样为我的方法配置缓存: @Cacheable(value = USER_ENTITY_1_CACHE, key = "#userId") public List findEntities1
我是一名优秀的程序员,十分优秀!