Я также продолжаю использовать решение для кэширования Guava в Scala:)
Прежде всего, как отмечено в одном из комментариев, в более новых версиях Guava Cache , MapMaker()
теперь устарела, и вы должны использовать CacheBuilder
.
Так что теперь, в Scala это будет выглядеть следующим образом:
lazy val cachedData = CacheBuilder.newBuilder()
.expireAfterWrite(60, TimeUnit.MINUTES)
.maximumSize(10)
.build(
new CacheLoader[Key, Data] {
def load(key: Key): Data = {
veryExpansiveDataCreation(key)
}
}
)
Чтобы читать из него, вы можете использовать что-то вроде:
def cachedData(ketToData: Key): Data = {
try {
return cachedData.get(ketToData)
} catch {
case ee: Exception => throw new YourSpecialException(ee.getMessage);
}
}