Spring Can弹簧&x27;s缓存抽象将动态生存时间应用于方法的结果?

Spring Can弹簧&x27;s缓存抽象将动态生存时间应用于方法的结果?,spring,spring-cache,Spring,Spring Cache,我有一个方法(例如,ValueResponse-ApiClient#getValue())调用HTTP API,该API的响应如下: { "value": "xyz", "ttl": 3600 } JSON响应中的ttl(以秒为单位)不是常量,在调用API之间可能会发生变化 我从另一个方法调用此方法,该方法要使@Cacheable: @可缓存(…) 公共价值评估方法(){ 返回apiClient.getValue(); } 我希望ValueResponse在其ttl字段的

我有一个方法(例如,
ValueResponse-ApiClient#getValue()
)调用HTTP API,该API的响应如下:

{
    "value": "xyz",
    "ttl":   3600
}
JSON响应中的
ttl
(以秒为单位)不是常量,在调用API之间可能会发生变化

我从另一个方法调用此方法,该方法要使
@Cacheable

@可缓存(…)
公共价值评估方法(){
返回apiClient.getValue();
}
我希望
ValueResponse
在其
ttl
字段的持续时间内(实际上
ttl-60
秒)最多被缓存

如何使用Spring的缓存抽象实现这一点


注意:如果有问题,我正在使用EhCache进行缓存,但将来可能会切换到Redis或Memcached。

缓存抽象不提供任何关于配置的抽象


如果您想沿着这条路走下去,您应该在代码中插入
CacheManager
,获取
Cache
并访问其
NativeCache
属性,并使用缓存库特定的代码来应用TTL。

您可以使用org.springframework.Cache.interceptor.CacheInterceptor对其进行扩展:正如您在这个答案中所看到的,有一些cacheManager,其中put方法也具有TTL。对于Ehcache,这是不可能的,但还有其他提供程序