【问题标题】:Spring Cache Hit Flag/IndicatorSpring Cache 命中标志/指示器
【发布时间】:2020-09-03 09:42:58
【问题描述】:
我正在使用 Spring Cache 通过@Cacheable 缓存一些对象。但是,其中一项要求要求我能够知道返回的对象是来自缓存命中还是标准调用。是否有任何设置的标志或指标可以用来检查?
我曾经看到过有关缓存命中的问题,只要有缓存命中就会记录下来,但这对我的情况并没有真正的用处。我目前正在将 Spring Cache 与 Simple Provider 一起使用,并且愿意使用任何能够执行此操作的外部缓存管理器。
【问题讨论】:
标签:
spring
ehcache
spring-cache
【解决方案1】:
是的,我们可以通过一个标志知道它是缓存命中还是缓存未命中(直接调用 REST 调用或数据库调用)。
使用@Cacheable,它总是先检查缓存,在执行方法之前,如果在缓存中找到,它将跳过方法执行,而@CachePut的工作方式略有不同,它将执行推荐的方法& 更新缓存,所以它总是会错过缓存。
例如:
private volatile boolean cacheMiss = false;
public boolean isCacheMiss(){
boolean cacheMiss = this.cacheMiss;
this.cacheMiss = false; //resetting for next read
return cacheMiss;
}
protected void setCacheMiss(){
this.cacheMiss = true;
}
@Cacheable("Quotes")
public Quote requestQuote(Long id) {
setCacheMiss();
//REST CALL HERE
return requestQuote(ID_BASED_QUOTE_SERVICE_URL,
Collections.singletonMap("id", id));
}
cacheMiss 变量给出状态,无论是否来自缓存。
这里是 Spring Caching with GemFire 讨论的,底层缓存提供程序是 Pivotal GemFire。您可以使用任何此类缓存提供程序。