Documentation

You are viewing the documentation for the 2.3.x release series. The latest stable release series is 2.4.x.

§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 チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。