Documentation

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

§キャッシュ API

データのキャッシュは現代的なアプリケーションではよく使われるパフォーマンスの最適化手法です。Play は、アプリケーション全体で利用できるグローバルなキャッシュを提供しています。キャッシュの重要な点は、通常のキャッシュとして期待されている通りに振る舞うということです。つまり、たった今保存したデータが、いつの間にか消えているということがありえます。

キャッシュに保存されているデータは、いつでも消去される可能性があります。その時に備えて、データを再生成する方法は常に用意しておく必要があります。この哲学は Play の基盤の一つであり、セッションがその有効期間の間ずっと値を保持するという Java EE の哲学とは異なります。

キャッシュ API のデフォルト実装には EHCache を利用しており、これはデフォルトで有効になっています。別の実装をプラグインとして提供することもできます。

§キャッシュ API へのアクセス

キャッシュ API は play.cache.Cache オブジェクトにより提供されています。このオブジェクトを利用するには、キャッシュプラグインの登録が必要です。

注意: この API は様々な実装をプラグインできるよう、意図的に最小限に抑えられています。より特殊な API が必要な場合、別のキャッシュプラグインにより提供される API を使用してください。

このシンプルな API を使ってキャッシュにデータ格納することができます:

Cache.set("item.key", frontPageNews);

オプションとして、キャッシュの有効期間を (秒単位で) 指定することができます。

// Cache for 15 minutes
Cache.set("item.key", frontPageNews, 60 * 15);

このデータを取得するためには次のようにします。

News news = Cache.get("item.key");

キャッシュから要素を削除するときは remove メソッドを使います:

Cache.remove("item.key")

§HTTP レスポンスのキャッシュ

標準的な Action の合成を使って、レスポンスをキャッシュするアクションを簡単に作成することができます。

注意: Play の HTTP Result インスタンスは、安全にキャッシュし、あとから再利用することができます。

Play は標準的に利用できるデフォルトの組み込みヘルパを提供しています。

@Cached("homePage")
public static Result index() {
  return ok("Hello world");
}

§テンプレートにおけるキャッシュ

ビューテンプレートからキャッシュにアクセスすることもできます。

@cache.Cache.getOrElse("cached-content", 3600) {
     <div>I’m cached for an hour</div>
}

§セッションキャッシュ

Play はアプリケーション内であればどこからでもデータを参照することができるグローバルなキャッシュを提供しています。データを特定のユーザのみ参照できるように制限をかけるにはどうしたらいいでしょうか?例えば、特定のユーザにのみ適用される数値指標をキャッシュしたい場合は次のようにします。

// Generate a unique ID
String uuid=session("uuid");
if(uuid==null) {
	uuid=java.util.UUID.randomUUID().toString();
	session("uuid", uuid);
}

// Access the cache
News userNews = Cache.get(uuid+"item.key");
if(userNews==null) {
	userNews = generateNews(uuid);
	Cache.set(uuid+"item.key", userNews );
}

次ページ: Web サービスの呼び出し


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