2013-04-09 38 views

回答

0

過期時間是對象在高速緩存中保存的秒數。如果您將0作爲到期時間傳遞,則緩存不會過期,您將不得不手動控制它。

getOrElse所做的是檢查緩存,如果該對象不存在,請調用您正在傳遞的可調用塊,並將結果添加到緩存中,並將您作爲截止時間傳遞的秒數添加到緩存中。

我根據我的評論Play Framework Cache Javadoc

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*60意味着我想將它保存一小時(60秒Times全球60分鐘... ...好吧,你可以寫3600如果你想)

我要補充一點,getOrElse得到Object從緩存中與指定鍵(在這個例子中鍵是static-content),但是如果它找不到它,則它調用函數,該函數返回一個對象,然後該對象將被存儲在具有該鍵的緩存中指定的時間量。很簡約。

然後,您可以調用其他(動態)頁面並將html傳遞給它。

動態的東西將保持動態:)

1

讓我們假設,你想設置緩存User對象,爲您設置userIdkeyuser objectvalue。如果需要設置到期時間,對於示例我將它設置爲30秒。

cache.set(userId, userObject, 30); 

在一定的時間點,如果你想從緩存中獲取用戶對象,您先前設置使用用戶ID作爲鍵,你可以嘗試以下方式來獲得高速緩存的用戶對象。

User user = cache.get(userId); 

上面將返回用戶對象,如果你30secs中訪問,否則將返回NULL。這對於驗證會話等情況非常適用。 在某些情況下,您經常需要從緩存中檢索值,因爲以下是最佳方法。

User user = cache.getOrElse(userId,() -> User.get(userId), 30); 
  1. 緩存會檢查,是否已經給用戶ID作爲關鍵,如果有則馬上返回用戶對象和更新過期時間進一步30secs。
  2. 如果給定userId不可用,則調用可調用塊並將userId設置爲key,將從db獲取的用戶對象作爲值和過期時間設置爲30secs。
相關問題