2012-06-20 82 views
0

我正在使用Spring 3.1在Google App Engine上運行一個Web服務servlet,由於我對這個遊戲很新,所以我根本不知道應該如何緩存。看起來有好幾個地方我可以在servlet的整個生命週期中保留這些東西:如何緩存我的servlet的東西?

  1. 應用程序上下文。在這裏定義bean將允許我輕鬆地將它們注入到我的代碼中。這看起來像是最簡單的解決方案,只是將我的bean限制爲單例。
  2. Servlet上下文。爲此,當我的servlet啓動時,我可以通過抓取它的實例並執行setAttribute()來將事情放入ServletContext中。
  3. Memcache。我還沒有看過這麼多,但我想我只會得到一個緩存實例,並像ServletContext一樣向它推入一個對象。

我很好奇的具體情況是創建用戶帳戶。我想保留所有用戶ID的HashSet,以便我可以檢查請求的用戶ID是否已被使用。

除了上面的具體情況,包括使用每種不同的技術的情況下,將不勝感激。

+0

請注意,1和2實際上是相同的。在平均的基於servlet的MVC框架中,「應用程序上下文」在所涵蓋的servlet上下文屬性下使用。這只是一個額外的抽象層。 – BalusC

+0

我不認爲將所有用戶ID存儲在HashMap緩存中是個不錯的主意。首先,這不會水平放大。其次,您需要同步讀取/寫入它以確保沒有競爭條件。 – Andy

回答

2

在您的具體情況下,我建議您使用持久性存儲,如數據存儲或雲端sql(您可以看到所有替代品here)。

Memcache不是一個選項,因爲你無法控制存儲了多少個元素。而且任何應用程序上下文也不是解決方案,因爲實例在實踐中在不同的數據中心中多次加載和重新加載。

另請注意,AppEngine通過Users Service提供對使用Google帳戶或OpenId的支持。

+0

好點。要清楚,每次我需要檢查是否使用了用戶標識時,我正在訪問數據存儲?你可以舉例說明什麼時候使用memcache/application context/servlet context – MStodd

+0

是的,你每次都會碰到數據存儲區,但是你可以索引那個屬性。通常,您使用memcache來緩存慢速/昂貴的查詢/進程,例如檢索給定用戶的整個配置文件(可能涉及計算使用情況統計信息等)。常見模式是:如果memcache中的元素(查詢/進程/等)返回它;否則計算它,保存並返回;還需要注意的是,每當更改可能影響以前結果的資源時,都需要使緩存中的條目無效。 –

相關問題