spray-cache: Return 未来失败时的旧值

spray-cache: Return old value if the future fails

我们正在使用 spray-cache(还不能移动到 akka-http)来缓存我们正在调用的下游服务的结果。我们想要的效果是,如果数据超过 15 分钟,则调用,否则 return 缓存数据。

我们的问题是,如果服务调用失败,spray-cache 将从缓存中删除条目。我们需要的是 return 旧的缓存数据(即使它是陈旧的),并在下一个请求进来时重试下游请求。

Spray 似乎没有随附可以满足您要求的默认缓存实现。根据 the spray-caching docsCache 特性有两种实现方式:SimpleLruCacheExpiringLruCache

你想要的是一个 Cache 来区分条目 expiration(从缓存中删除条目)和条目 refresh(获取或计算条目的更新副本)。

由于两个默认实现都将这两个概念合并为一个超时值,我认为您最好的选择是编写一个新的 Cache 实现来区分刷新和过期。