gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:38:32 26 4
gpt4 key购买 nike

我有一个 db-access,我想缓存在我的 akka/spray-application 中。数据库返回一个 Future[Option[X]]。

我设置了一个 lruCache 并将其包裹在我的数据库访问中。

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

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

到目前为止,我通过 map 再次从缓存中删除了 Option 并在它为 None 或 future 失败时恢复:

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

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

提前谢谢你,

詹斯

最佳答案

如果 future 失败,则该值将从缓存中删除: 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com