当前位置: 首页 > 知识库问答 >
问题:

如何使用CachePut更新缓存?

那开济
2023-03-14

我的@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

共有1个答案

公西季
2023-03-14

相反,应该使用@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()方法,允许返回陈旧的缓存值,直到检索到新值