2011-02-23 103 views

回答

23

緩存 - 存儲常用值,通常是因爲查找和/或創建不平凡。例如如果經常使用數據庫的查找表,或者從磁盤上的文件讀取值,那麼將其保存在內存中並定期刷新它會更有效。

緩存只管理緩存中的對象生存期,但不對緩存中保存的內容施加語義。緩存也不會創建項目,而只是存儲對象。

池 - 用於描述由池本身管理的一組資源的術語。例如(數據庫)連接池 - 當需要連接時,它從池中獲取,並在完成時返回到池中。

池本身處理創建和銷燬池中的對象,並管理可以在任何時候創建多少個對象。

池通常用於減少開銷並限制對資源的訪問。您不希望每個servlet請求都打開到數據庫的新連接。因爲那麼你在活動請求和打開的連接之間有1:1的關係。創建銷燬這些連接的開銷是浪費的,再加上你可能很容易壓倒你的數據庫。通過使用池,這些打開的連接可以共享。例如,500個活動請求可能共享少至5個數據庫連接,具體取決於典型請求需要連接的時間。

高速緩存池 - 大多數似乎描述存在的(獨立的?)高速緩存的數量。例如。一個asp.net應用程序對每個應用程序域有1個緩存(緩存不在asp.net應用程序之間共享)。從字面上看是一堆緩存,儘管這個詞似乎很少使用。

6

緩存正在保存值/對象以供重用 - 通常用於節省資源。

Wikipedia說:

一個緩存,這樣對於未來的數據請求可以更快地服務透明地存儲數據的組件。

輪詢是相似的,那就是你有一些這樣的對象(池) - 一旦對象已經被取出游泳池和使用,它返回到池中以備後用。

Wikipedia說:

計算機科學池是一組保持隨時使用,而不是分配和銷燬按需初始化資源。

2

兩者都以對象重用爲目標。區別通常是有狀態的。池是無狀態對象的集合,緩存是有狀態對象之一。見this explanation

3

緩存通常指的是保存數據的靜態副本以便快速檢索(假設檢索或計算值很昂貴)。

合併通常是指保留大量資源以便快速使用(假設創建和/或處置這些資源很昂貴)。

0

無論是重複使用和減少過程的內存佔用(也擺脫對象創建開銷)。一個值得注意的差異是池在上下文的生命週期中一次又一次地使用相同的對象,其中在緩存中(至少在LRU中)你驅逐對象以爲新創建的對象騰出空間。

另一個差異將是以下問題的答案。你想返回一個特定的對象或任何對象會罰款?答案明確了你需要什麼 - 緩存或池。

相關問題