【发布时间】: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