spray-cache:仅在不是None时缓存

jen*_*ens 2 caching scala spray

我有一个db-access我想缓存在我的akka​​/spray-application中.db返回Future [Option [X]].

我设置了一个lruCache并将其包装在我的db-access中.

我想要实现的是,仅缓存Option,如果它是Some(X)而不是,如果它是None.在后一种情况下,应再次从数据库中检索数据.

如果这会有所帮助,我可能会在未来失败......

到目前为止,我通过map再次从缓存中删除Option,如果它是None或者将来失败,则恢复:

cache(key) {
      server.one[X](...)
}.map {
   case Some(x) => Some(x)
   case None => {
     cache.remove(key)
     None
  }
}.recover {
  case x => userCache.remove(key)
}
Run Code Online (Sandbox Code Playgroud)

但这非常难看,更不用说地图中的副作用等等......

先感谢您,

Vik*_*ang 5

如果未来失败,那么该值将从缓存中删除:https: //github.com/spray/spray/blob/master/spray-caching/src/main/scala/spray/caching/LruCache.scala# L79

所以这应该这样做:

cache(key) { server.one[X](...).map(_.get) }
Run Code Online (Sandbox Code Playgroud)