2012-01-26 9 views
0

自動的にデータをキャッシュしますか? 私は誰かが書いたこのコードを読もうとしており、foreachループ内でCache.getを実行しています。これは、プログラムが停止する場所でもあります。Playのキャッシュの実装について説明してください。

この人は、このメソッドに関連する他の場所ではCache.setを使用しなかったため、何が起こっているのか分かりません。

コードの例:

for(aList page: pages){ 
    //blah blah code; 

    Page.PageInfo pageinfo = (Page.PageInfo) Cache.get(page.url); 

    //blah blah code; 
} 

彼は別のforeachループでこのforeachループの後Cache.setを使用していますが、私はそこに設定されたものがない場合、彼は何かを取得しているかを理解していないが。

答えて

0

Playには独自のCache APIがあります。これは、デフォルトのEHCache実装やMemcachedのような高度な機能をサポートしています。

キャッシュはキャッシュのみであるため、Cache.get()の呼び出しによって常に結果が得られるとは限りません。あなたが提供したコードスニペットには、明らかに結果が見つかったかどうかを確認するためにCache.get()コールの後にヌルチェックが欠けています。キャッシュに値がない場合は、他の場所(データベース、通常はより高価な操作ですが結果を返すことが保証されています)から取得するか、重要でない場合は値を指定せずに作業を続行する必要があります。