2

Cache.getOrElse(java.lang.String key, java.util.concurrent.Callable block, int expire) の使い方 誰か例を教えてくれませんか? ポイントは「有効期限」の使い方です。

ところで、いくつかのオブジェクトをキャッシュに保存し、有効期限を設定したいと思います。有効期限が切れたら、オブジェクトをキャッシュにリセットできます。

ありがとう。

4

3 に答える 3

1

asおよびasUserを設定するために、オブジェクトをキャッシュに設定するとします。有効期限を設定する必要がある場合は、サンプルの場合は 30 秒に設定します。userIdkeyuser objectvalue

cache.set(userId, userObject, 30);

ある時点で、以前に userId をキーとして設定したキャッシュからユーザー オブジェクトを取得する場合は、次の方法を試してキャッシュからユーザー オブジェクトを取得します。

User user = cache.get(userId);

上記は、30 秒以内にアクセスした場合はユーザー オブジェクトを返し、それ以外の場合は を返しNULLます。これは、セッションの検証などの場合に最適です。場合によっては、キャッシュから頻繁に値を取得する必要があります。その場合は、次の方法が最適な方法です。

User user = cache.getOrElse(userId, () -> User.get(userId), 30);
  1. キャッシュは、userId がキーとして指定されているかどうかを確認し、利用可能な場合はすぐにユーザー オブジェクトを返し、有効期限をさらに 30 秒に更新します。
  2. 指定された userId が使用できない場合、呼び出し可能ブロックが呼び出され、userId がキーとして設定され、ユーザー オブジェクトが db から値として取得され、有効期限が 30 秒として設定されます。
于 2016-11-02T14:46:45.590 に答える
0

表示する動的コンテンツと静的コンテンツがある場合は、コントローラーで getOrElse を使用します。静的部分をキャッシュしてから、動的部分と一緒にレンダリングします。

    try {

        Html staticHtml = Cache.getOrElse("static-content", () -> staticView.render(), 60 * 60);

        Html rendered = dynamicPage.render(arg1, arg2, staticHtml);
        return ok(rendered);

    } catch (Exception e) {
        e.printStackTrace();
        return internalServerError();
    }

staticView.render()ビューからいくつかの html を返します。このビューは、動的な他のページを呼び出したり、実際には隠したくないものを隠したりしないでください。

60*601時間保存したいという意味です(60秒×60分...必要に応じて記述3600できます)

指定されたキー (この例ではキーは ) でキャッシュからgetOrElse取得することを追加する必要がありますが、それが見つからない場合は、オブジェクトを返す関数を呼び出し、指定された時間だけキャッシュに格納されます。その鍵で。かなりきれい。Objectstatic-content

次に、他の (動的) ページを呼び出して、html を渡すことができます。

動的なものは動的のままです:)

于 2015-02-16T16:41:02.683 に答える
0

有効期限は、オブジェクトがキャッシュに保持される秒数です。有効期限として 0 を渡すと、キャッシュは期限切れにならず、手動で制御する必要があります。

getOrElse が行うことは、キャッシュをチェックすることです。オブジェクトがそこにない場合は、渡している呼び出し可能なブロックを呼び出し、有効期限として渡している秒数だけ結果をキャッシュに追加します。

私のコメントはPlay Framework Cache Javadocに基づいています。

于 2014-02-17T19:27:12.020 に答える