我有一个数据库访问,我想缓存在我的akka/喷雾-应用程序。db返回一个Future[OptionX]。
我设置了一个lruCache,并将它封装在我的数据库访问中.
我想要实现的是,只缓存选项,如果它是一些(X),而不是,如果它是没有。在后一种情况下,应该再次从db检索数据。
如果这能帮上忙的话我可能会失败的..。
到目前为止,我再次通过map从缓存中删除该选项,如果没有或未来失败,则恢复:
cache(key) {
server.one[X](...)
}.map {
case Some(x) => Some(x)
case None => {
cache.remove(key)
None
}
}.recover {
case x => userCache.remove(key)
}但这很难看,更不用说地图上的副作用了等等.
提前谢谢你,
延斯
发布于 2014-01-28 08:28:57
如果未来失败,那么该值将从缓存:https://github.com/spray/spray/blob/master/spray-caching/src/main/scala/spray/caching/LruCache.scala#L79中移除。
所以这应该可以做到:
cache(key) { server.one[X](...).map(_.get) }https://stackoverflow.com/questions/21400112
复制相似问题