在playframework中緩存未來結果的正確方法是什麼?例如: -Cache.getOrElse on Futures in Playframework
val userGravatar: Future[JsValue] = RemoteGravatarService.get(user.id, user.email)
object RemoveGravatarService {
def get(userId: String, email: String): Future[JsValue] = {
Cache.getOrElse("gravatar-for-$userId", 1.hour) {
WS.url("gravatar.com/email=$email").get().asJson
}
}
}
我們不想問(這個虛構的)「的Gravatar」每一次,因爲它不會改變那頻繁。但我們經常需要本地的som userGravatar信息。
這裏我們緩存未來本身,但實際上我們只想緩存未來的結果。有沒有一種方便/正確的方法來實現這一點?
任何類型的,但讓我們說'JsValue'(因爲它是可序列化)。更新了類型註釋的示例。這裏重要的是,如果緩存中的值已準備就緒,我希望緩存響應'Future.successful(previousJsonResult)'。 – kornfridge
你可以使用噴霧緩存 –