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

在Spring Boot中未更新缓存

梁韬
2023-03-14

我使用SpringBoot@CachePut和@Cacheable注释来缓存数据。

@CachePut(value = "cache1", key = "#clientId")
public Map<String, Object> buildCache(Long clientId){
Map<String, Object> cacheMap= new HashMap<String, Object>();
//get values from remote db and store them in the local db as well as cache
return cacheMap;
}

@Cacheable(value = "cache1", key = "#clientId")
public Map<String, Object> getFromCache(Long clientId){
     //get from local db
}

在buildCache中,我从远程数据库获取值,并将这些值保存在本地数据库和缓存中。在getCache方法中,我从本地数据库获取值。当我第一次调用getCache方法时,它被执行,本地DB值被保存在缓存中。然后我调用buildCache方法来更新缓存和本地DB值。之后,我再次调用getCache方法来获取更新后的值。但是这个方法仍然返回旧值而不是新值

简而言之,为了刷新缓存,我执行@CachePUT方法。但是当我调用@Cacheable方法时,我没有得到更新的值。

请告诉我哪里出错了。

共有1个答案

阙沛
2023-03-14
@CacheEvict(value ="user" ,allEntries = true)
@CachePut(value = "user",key = "#userDTO.id")
@PostMapping("user/update")
public List<User> updateUser(@RequestBody UserDTO userDTO){
    return userService.updateUser(userDTO);
}

首先删除现有缓存,然后进行更新,以便下次第一次从DB获取数据,然后它将存储在缓存中并从缓存获取数据。

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

  • 背景: 项目里使用了Guava本地缓存,缓存了数据库的一部分数据,项目使用K8S部署,大概有10台左右的机器。当数据库更新时,希望所有机器的缓存同步更新。目前采用的是canal监听binlog + 刷入kafka。基于此场景,所以项目使用了广播模式来消费kafak的消息。 问题:由于机器的数目会基于整体压力动态变化,并不是固定数量,所以我们在项目里并没有写死消费者组ID,而是采用了随机数目的方式。

  • 一、本功能说明 本节仅为更新缓存的作用,进行过某些模块的设置等操作或者感觉某些地方不正常的时候请更新缓存。 1).如何进入本功能 导航栏 选择扩展 -> 菜单栏 选择更新全站缓存

  • 背景: < li >我正在使用< code>npm和< code>docker在< code>node.js中编写代码。我试图让我的docker文件在构建时使用缓存,这样不会花太长时间。 < li >我们有一个“通用”存储库,用于保存在各种存储库中使用的逻辑,并通过npm软件包进行传播。 问题是: 我希望docker文件不要使用我的“通用”包上的缓存。 Docker文件: package.json

  • 问题内容: 在事件回调中更新模型时,更新模型属性对视图没有影响,是否有任何解决办法? 这是我的服务: 功能已在控制器中动态添加。 控制器: 视图: 因此,问题在于单击按钮会正确更新视图,但是当我从Channel收到消息时,什么也没发生,即使该函数被调用 问题答案: 你失踪了。 每当您从Angular世界外部触摸任何东西时,都需要调用,以通知Angular。可能来自: xhr回调(由$ http服务