3

我意識到這可能是一個模糊的問題,遺傳了一個模糊的答案,但我需要一些真實世界的例子,想法,或爲Web應用程序緩存數據的最佳實踐。我讀過的所有例子本質上都是技術性較強的(如何從相應的緩存存儲中添加或刪除緩存數據),但我無法找到更高級別的緩存策略。什麼應該存儲在緩存中的Web應用程序?

例如,我的web應用程序爲每個用戶都有一個收件箱/郵件功能。我一直在做的是將典型的會話數據存儲在緩存中。在這個例子中,當用戶登錄時,我轉到數據庫並檢索用戶的郵件並將它們存儲在緩存中。我開始懷疑我是否應該始終在緩存中維護所有用戶郵件的副本,並在需要時從緩存中檢索它們,而不是在登錄時從數據庫加載。我有一堆登錄時加載的其他數據(產品目錄和相關實體),登錄速度開始放慢。

所以我想我的問題是社區,你會做什麼/推薦作爲在這種情況下的方法?

謝謝。

+0

試着看看這個網站上的一些文章,他們解釋了高層緩存的一些不同方面http://developer.att.com/developer/forward.jsp?passedItemId=9700192 –

回答

4

這可能是更適合於https://softwareengineering.stackexchange.com/,但一般要緩存:

不經常更改
  • 元/配置數據。例如。國家/州列表,外部資源地址,邏輯/分支設置,產品/價格/稅收定義等。
  • 檢索或生成成本高且無需頻繁更改的數據。例如。報告的歷史數據集。
  • 當前用戶會話唯一的數據。

上面的最後一項是您需要小心的地方,因爲您可以通過爲每個活動會話的數據添加幾兆字節來大幅增加應用的內存使用量。這也意味着不同級別的緩存 - 應用程序範圍,用戶會話等。

通常,您不應該緩存處於活動更改狀態的數據。

在較大的系統中,您還需要考慮緩存的位置。是否有可能有一箇中央緩存服務器,還是每個服務器/進程足以處理它自己的緩存?

另外:你應該有一些方法來快速重置/無效的緩存數據。對於較小或較少的關鍵任務應用程序,這可能與重新啓動Web服務器一樣簡單。對於我所處理的大型系統,我們使用大多數緩存數據的12小時絕對到期時間窗口,但是如果需要,我們可以強制立即到期。

這是一個非常廣泛的問題,答案很大程度上取決於您正在構建的特定應用程序/系統。我不太瞭解你的具體情況,說你是否應該緩存所有用戶的消息,但本能地看來,這似乎是一個壞主意,因爲你似乎有效地緩存你的整個數據集。如果新消息進入或被刪除,這可能會導致問題。你會在緩存中更新它們嗎?這不會簡單地複製後臺存儲嗎?

緩存只是一種性能優化技術,與任何優化一樣,在進行實質性更改之前首先測量,以避免浪費時間優化錯誤的事情。也許你不需要太多的緩存,它只會讓你的應用程序變得複雜。也許您正在考慮緩存的數據可以以更快的方式檢索,或者更少的數據可以立即檢索。

2

緩存導致重複數據庫查詢的任何內容。

相關問題