scala - 喷雾缓存 : cache only when not None

标签 scala caching spray

我有一个数据库访问权限,我想在我的 akka/spray 应用程序中缓存。数据库返回一个 Future[Option[X]]。

我设置了一个 lruCache 并将其包装在我的数据库访问周围。

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

或者,如果这有帮助的话,我可能会让 future 失败......

到目前为止,我通过 map 再次从缓存中删除了该选项,如果它为“无”或将来失败,则恢复:

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

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

提前谢谢您,

延斯

最佳答案

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

所以这应该可以做到:

cache(key) { server.one[X](...).map(_.get) }

关于scala - 喷雾缓存 : cache only when not None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21400112/

相关文章:

python - 用于后续在 python 中运行的缓存工具

scala - Spray Collection ToResponseMarshallable

scala - 将路由从 spray.io 迁移到 akka http

scala - 在喷雾路由中使用 Future

scala - Scala中如何读取38位精度18位小数的数据

scala - 无法将 Azure 广告公钥字符串转换为 PublicRSAKey

java - 如何使用 guava CacheBuilder?

scala - 是否可以使用宏实现类似于 Scala 的 @BeanProperty 的东西?

json - 将 List[JsResult[A]] 排序为 JsResult[List[A]]

wordpress - 已添加 SSL。现在 W3 Total Cache 将页面重定向到缓存 _index.html_gzip 文件