§Play キャッシュ API
キャッシュ API のデフォルト実装は EHCache です。その他の実装はプラグイン経由で利用することができます。
§キャッシュ API のインポート
依存ライブラリの一覧に cache
を追加してください。 build.sbt
の例です。
libraryDependencies ++= Seq(
cache,
...
)
§キャッシュ API へのアクセス
キャッシュ API は play.api.cache.Cache
オブジェクトとして提供されています。このオブジェクトを利用するためには、キャッシュプラグインが既に登録されている必要があります。
Note: 様々な実装をプラグインできるように、キャッシュ API の機能は意図的に最小限に絞りこまれています。より特殊な API が必要な場合、独自のキャッシュプラグインにその API を持たせるとよいでしょう。
Cache.set("item.key", connectedUser)
そして、保存したデータを後で取得するためには、次のようなコードを記述します。
val maybeUser: Option[User] = Cache.getAs[User]("item.key")
値がキャッシュに保存されていればそれを取得し、そうでなければ保存するという機能を持つ便利なヘルパ関数もあります。
val user: User = Cache.getOrElse[User]("item.key") {
User.findById(connectedUser)
}
remove
メソッドでデータをキャッシュから削除することができます。
Cache.remove("item.key")
§HTTP レスポンスのキャッシュ
標準的なアクション合成の方法を使って、簡単にスマートなキャッシュ機能を備えたアクションを実装できます。
Note: Play HTTP の
Result
インスタンスはキャッシュして後で再利用しても安全です。
Play は標準的なケースのためにデフォルトのビルトインヘルパーを提供しています。
def index = Cached("homePage") {
Action {
Ok("Hello world")
}
}
あるいは
def userProfile = Authenticated {
user =>
Cached(req => "profile." + user) {
Action {
Ok(views.html.profile(User.find(user)))
}
}
}
§キャッシュ制御
キャッシュしたり、キャッシュから除外することを簡単に制御できます。
200 Ok の結果だけをキャッシュすることもできます。
def get(index: Int) = Cached.status(_ => "/resource/"+ index, 200) {
Action {
if (index > 0) {
Ok(Json.obj("id" -> index))
} else {
NotFound
}
}
}
また数分間だけ 404 Not Found をキャッシュすることもできます。
def get(index: Int) = {
val caching = Cached
.status(_ => "/resource/"+ index, 200)
.includeStatus(404, 600)
caching {
Action {
if (index % 2 == 1) {
Ok(Json.obj("id" -> index))
} else {
NotFound
}
}
}
}
次ページ: Web サービスの呼び出し
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。