【问题标题】:Cache is not getting updated in Spring Boot缓存没有在 Spring Boot 中更新
【发布时间】:2018-06-27 05:00:00
【问题描述】:

我正在使用 Spring Boot @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 中,我从远程 DB 获取值并将这些值保存在本地 DB 和缓存中。在 getCache 方法中,我从本地数据库中获取值。当我第一次调用 getCache 方法时,它被执行并将本地 DB 值保存在缓存中。然后我调用 buildCache 方法来更新缓存以及本地 DB 值。之后,我再次调用 getCache 方法来获取更新的值。但是这个方法仍然返回旧值而不是新值

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

请告诉我哪里出错了。

【问题讨论】:

  • 不确定你在问什么。你说的不被反映是什么意思。
  • @pvpkiran 很抱歉造成混乱。我已经更新了我的帖子。
  • 是在类级别或函数级别(在 buildCache 内部)声明的 cacheMap。你在 getFromCache 方法中有什么?
  • @pvpkiran cacheMap 是一个局部变量。它在方法内部声明和使用。在 buildCache 中,我从远程数据库获取值并将这些值保存在本地数据库和缓存中。在 getCache 方法中,我从本地数据库中获取值。当我第一次调用 getCache 方法时,它被执行并将本地数据库值保存在缓存中。然后我调用 buildCache 方法来更新缓存以及本地数据库值。之后,我再次调用 getCache 方法来获取更新的值。但是这个方法仍然返回旧值而不是更新值。
  • 我认为您对@Cacheable@CachePut 感到困惑。只有在这两种方法之间有一个公共变量时,您想要的场景才会起作用。如果你放更多的代码会更好。在此处查看示例以更好地理解concretepage.com/spring/…

标签: java spring spring-boot caching


【解决方案1】:
@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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2018-03-15
    • 2016-10-13
    • 2016-08-10
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多