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

@cacheput不更新缓存

丌官皓君
2023-03-14
@Service
public class SlowService {

    String text = "Initial value";

    @Cacheable("text")
    public String getText() {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return text;
    }

    @CachePut(value = "text", key = "#newText + 1")
    public String setText(String newText) {
        text = newText;
        return text;
    }
}
@Cacheable(value = "text", key = "#someKey")
    public String getText() {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return text;
    }

    @CachePut(key = "#someKey")
    public String setText(String newText) {
        text = newText;
        return text;
    }

共有1个答案

欧阳鸿哲
2023-03-14

您需要确保在缓存中缓存的值被与在使用cache Put时相同的键引用。

例如:

假设您正在用键“hw”缓存文本“hello world”。您的缓存将保存一个值为“Hello World”的键“HW”。

@Cacheable(value = "text", key = "hw")
public String getText() {
    try {
        TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return text;
}

@CachePut(key = "hw")
public String setText(String newText) {
    text = newText;
    return text;
}
 类似资料:
  • 我的@cacheable方法有下一个签名: 该过滤器使用reporisoty,以limit作为分页参数,返回实体列表。我正在尝试在向系统添加实体时更新缓存: java.lang.ClassCastException:不能将com.java.domain.Entity强制转换为java.util.List

  • 一、简介 当对PHPSSO进行修改后,执行此操作。 二、功能演示 更新应用列表缓存。如下图所示:

  • 如题,查阅资料得知@CachePut的作用是无论是否存在缓存,否会把方法的返回值更新入缓存,作用是更新缓存,适用于update操作。 假如我写个方法: public int updateUser(User user){},int表示0,1,那这个缓存有什么意义呢?而且执行了update后,@Cacheable的数据会同步更新吗?不更新数据不是就不对了吗? 实际项目中update了以后到底应该怎么做

  • 我有简单的代码,检查用户是否有特定的角色: 现在的问题是,当我改变角色时,所以在机器人运行时删除特定角色,用户仍然拥有权限。所以在机器人缓存中,用户仍然拥有特定的角色。 当用户角色改变时,有没有办法更新机器人缓存? 提前感谢

  • 我正在学习Spring Boot缓存,以便在我们组织的项目中应用这个概念,我制作了一个名为Emploe Cache的示例项目。我的控制器和服务组件中有四个方法insert、update、get和getall,对于insert和get,工作得很好。现在我第一次调用,然后它从数据库中提取数据。之后,我尝试使用进行更新,它更新数据库中的值,并且再次调用,但它没有从缓存返回更新的值。我还参考了的文档。我也

  • 场景是有一个主应用里面有多个子应用,其中a应用嵌入iframe(b应用)展示,可点击弹窗大屏展示; 问题1:a应用进来iframe展示操作没问题,但是点击大屏显示的时候控制台明明打印出来数据但是b应用页面没更新,使用强制刷新forceUpdate和局部刷新this.$nextTick都不好使,使用v-if也是初次进来有触发信息但是页面还是没有显示 问题2:c应用引入iframe(b应用),有复制和