我们正在使用spray-cache(无法移动到akka-http)来缓存我们正在调用的下游服务的结果。我们想要的效果是,如果数据超过15分钟,则进行调用,否则返回缓存数据。
我们的问题是,如果服务调用失败,spray-cache将从缓存中删除该条目。我们需要的是返回旧的缓存数据(即使它已经过时),并在下一个请求进入时重试下游请求。
答案 0 :(得分:3)
看起来Spray没有附带执行您想要的默认缓存实现。根据{{3}},Cache
特征有两种实现:SimpleLruCache
和ExpiringLruCache
。
你想要的是一个Cache
区分条目到期(从高速缓存中删除条目)和条目刷新(获取或计算更新的该条目的副本)。
由于两个默认实现都将这两个概念合并为一个超时值,我认为您最好的选择是编写一个新的Cache
实现,以区分刷新和到期。