我的@cacheable方法有下一个签名:
@Component
public class UpcomingFilter implements Filter<Entity> {
@Cacheable(value = {"upcoming"})
@Override
public List<Entity> filter(int limit) {
//retrieve from repository
}
}
该过滤器使用reporisoty,以limit作为分页参数,返回实体列表。我正在尝试在向系统添加实体时更新缓存:
@CachePut(value={"upcoming", "popular", "recentlyAdded", "recommendations", "thisWeek", "topRated"})
public Entity addEntity(RequestDto dto, User user) {
//do work, create and save entity to repository
return entity;
}
@Cacheable(key="#entity.id")
@CachePut(value={"upcoming","popular", "recentlyAdded", "recommendations", "thisWeek", "topRated"},
key = "#root.target.FILTER_KEY", condition = "#result != null")
public Entity addEntity(RequestDto dto, User user) {
//do work, create and save entity to repository
return entity;
}
public static final String FILTER_KEY = "filterKey";
@Cacheable(value = {"recentlyAdded"}, key = "#root.target.FILTER_KEY")
@Override
public List<Entity> filter(int limit) {
java.lang.ClassCastException:不能将com.java.domain.Entity强制转换为java.util.List
相反,应该使用@cacheput,@cacheevict。它对我有用:
@CacheEvict(value={"upcoming", "popular", "recentlyAdded", "recommendations", "thisWeek", "topRated"},
allEntries = true, condition = "#result != null")
public Entity addEntity(RequestDto dto, User user) {
//do work, create and save entity to repository
return entity;
}
我正在从下面的方法中获取电影列表,并带有@Cacheable注释。由于它没有任何参数,我将key设置为#root.method.name。 现在,我想添加一个新的电影,同样应该添加到上述缓存。 我试过这个,但它给了我例外。 我们可以在这里使用@CachePut注释,还是有其他方法?
一、简介 当对PHPSSO进行修改后,执行此操作。 二、功能演示 更新应用列表缓存。如下图所示:
如题,查阅资料得知@CachePut的作用是无论是否存在缓存,否会把方法的返回值更新入缓存,作用是更新缓存,适用于update操作。 假如我写个方法: public int updateUser(User user){},int表示0,1,那这个缓存有什么意义呢?而且执行了update后,@Cacheable的数据会同步更新吗?不更新数据不是就不对了吗? 实际项目中update了以后到底应该怎么做
使用Spring的缓存抽象,如何让缓存异步刷新条目,同时仍返回旧条目? 我试图使用Spring的缓存抽象来创建一个缓存系统,在相对较短的“软”超时之后,缓存条目可以刷新。然后,当查询它们时,返回缓存的值,并启动异步更新操作来刷新条目。我也会 Guava的缓存生成器允许我指定缓存中的条目应该在一定时间后刷新。然后可以用异步实现覆盖缓存加载器的reload()方法,允许返回陈旧的缓存值,直到检索到新值