gpt4 book ai didi

scala - Scala 中的 LRUCache?

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:42 25 4
gpt4 key购买 nike

我知道 Guava 有 an excellent caching library但我正在寻找对 Scala/功能更友好的东西,在那里我可以做 cache.getOrElse(query, {/* expensive operation */}) 之类的事情。我也看了Scalaz's Memo但它没有 lru 过期时间。

最佳答案

Spray 人员有一个 spray-caching使用 future 的模块。有一个简单的 LRU 版本和一个允许您指定明确的生存时间的版本,之后条目将自动过期。

Futures 的使用显然允许您编写不阻塞的代码。不过,真正酷的是,它作为奖励解决了“雷鸣般的羊群”问题。例如,针对不在缓存中的同一个条目,同时收到一堆请求。在一个简单的缓存实现中,一百个线程可能会错过缓存中的那个条目,然后跑去为那个缓存条目生成相同的数据,但当然 99% 的工作只是浪费了精力。您真正想要的是只让一个线程生成数据,让所有 100 个请求者都看到结果。如果您的缓存包含 Futures,这种情况会很自然地发生:第一个请求者立即在缓存中安装一个 Future,因此只有第一个请求者未命中。所有 100 个请求者都为生成的结果获得该 Future。

关于scala - Scala 中的 LRUCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561845/

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