当前,我将spring boot缓存抽象和咖啡因与config spring.cache.caffeine.spec=expireAfterWrite=2h,recordStats
一起用作唯一的config和类似的方法:
@Cacheable(
value = CacheConfig.PRODUCTS_CACHE_NAME
)
public List<ProductDetails> getProductsDetails(String language) {
// long running remote request
return products;
}
对于更灵活的行为,我希望在远程服务不可用时使高速缓存仍旧使用旧值。
但是配置spring.cache.caffeine.spec=refreshAfterWrite=2h,recordStats
导致异常告诉refreshAfterWrite requires a LoadingCache
。
我知道我自己可以实现一个CacheLoader
bean。但是然后我将不得不直接调用缓存,并且会失去@Cachable的透明行为。
我搜索以下行为:
缓存MISS =>加载值并同步返回。
Cache HIT =>从缓存中提供值。
刷新阈值后=>缓存HIT同步提供缓存中的旧值,并在后台刷新该值。
奖金:当前值早于X =>加载值之后,缓存HIT并同步返回。
这可能吗?