2008-11-08 58 views
0

使用魷魚,我們可以緩存網頁。我不確定它是否提供了與ASP.NET緩存相同數量的緩存方法(我主要使用ASP.NET),但它是緩存網頁的工具。使用Memcached和Squid時,是否需要ASP.NET緩存?

然後我們有memcached,它可以緩存數據庫表。我相信這是正確的,它就像SqlCacheDependency(糾正我,如果我錯了)。

但是,在大型Web應用程序中,是否有任何可以使用memcached,squid和ASP.NET(或PHP,JSP - 應用程序框架級別)緩存的空間。

謝謝!

回答

2

您可能發現緩存整個頁面過於粗糙,並且緩存數據庫表不足以提升性能,因此需要緩存大量內容。

例如,假設您有一個應用程序在每個頁面上顯示登錄用戶的名稱。緩存整個頁面並不會真正起作用,因此您需要在應用程序框架內的某個位置放下一個級別並緩存。

+0

您的示例是一種常見的情況。圍繞整頁緩存有一些方法,同時仍然改變特定的HTML片段,稱爲「甜甜圈緩存」。請參閱http://stackoverflow.com/questions/3318570/turn-off-page-level-caching-in-a-user-control/3318609#3318609 – 2011-10-21 23:18:16

2

然後我們有memcached,它可以緩存數據庫表。我相信這是正確的,它就像SqlCacheDependency(糾正我,如果我錯了)。

Memcached是一個分佈式哈希表。與.NET緩存內置的主要優點相比,您的緩存是可擴展的(您可以根據需要添加任意數量的memcached boxen)並同步(您的所有Web服務器都可以訪問相同的內容,並使一個Web中的數據失效或更新服務器會立即傳播到所有的人)

性能方面,它比.NET緩存惡化(你正在尋找了跨服務器的對象,而不是在內存中查找一臺機器上)

但是,在大型Web應用程序中是否有任何可以使用memcached,squid和ASP.NET(或PHP,JSP - 應用程序框架級別)緩存的空間。

基於上述原因,我可以想像一個2級高速緩存,使用.NET緩存第一,然後memcached的。 (例如,Get()查看memcached,將結果存儲在10秒內過期的.NET高速緩存中,然後在接下來的10秒內使用.NET高速緩存對具有相同高速緩存鍵的所有調用進行清洗,重複)

通過這種方式,您可以在沒有純memcached解決方案的網絡IO成本的情況下獲得內存中緩存查找的性能,同時具備memcached的同步和可伸縮性優勢。