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)
但这非常难看,更不用说地图中的副作用等等......
先感谢您,
延
如果未来失败,那么该值将从缓存中删除: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)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |