2011-09-08 75 views
12

我看到開發團隊中的一些人使用Memcached來緩存數據庫結果,而不是內置的.NET Framework Cache系統。我不明白爲什麼他們會使用這個特定的緩存。與.NET Cache系統相比,Memcached有什麼優勢?

也許性能更好。

無論如何,使用Memcached(而不是本地.NET Cache)有沒有真正的優勢?

+0

我會選擇memcached或AppFabric,它們都支持高可用性和容錯性集羣,就像剛剛提到的Justin一樣。 –

回答

23

Memcached是分佈式的 - 至關重要的是,這意味着如果我有一羣服務器訪問緩存,它們實質上都是從相同的緩存讀取和寫入。內置的.Net緩存沒有這個功能(至少我知道ASP.Net不支持)。

由於每臺機器都有自己獨立的緩存,這意味着(舉例):

  • 如果機器A計算/讀取的值,並將其放置在緩存中,機器B沒有得到任何好處這個。每臺機器都需要獨立維護並填充自己的緩存。這也可能浪費空間,因爲許多不同機器的緩存中可能存在相同的條目。
  • 如果機器B無效緩存條目,機器A不會意識到這種無效的,並可以繼續使用陳舊/過時的數據

Memcached中既沒有這些問題 - 一旦一項放在在緩存中,羣集中的所有機器都可以檢索相同的緩存項目。使高速緩存中的條目無效將使每個人都無效。

缺點

如果你的應用需要的機器集羣上函數,那麼它很可能,你將受益於分佈式緩存,但是如果你的應用程序只需要在一臺機器上運行,那麼你不會從使用分佈式緩存中獲得任何好處,並且使用內置的.Net緩存可能會更好。

  • 訪問分佈式緩存高速緩存需要進程間/網絡通信,這將具有優於淨高速緩存,其是在處理一個小的性能損失。
  • Memcached用作外部進程/服務,這意味着您需要在生產環境中安裝/運行該服務。 .Net緩存再次不需要這一步,因爲它們是在進程中託管的。
+0

「訪問一個memcached緩存需要進程間/網絡通信,這對正在處理的.Net緩存的性能影響不大。」 - >有沒有人在進程與memcached(位於相同的AWA地區/同一機架中)進行基準測試?有興趣看看In-Process vs. Memcache vs.數據庫。 – dazbradbury

2

Memcached的更好的比較實際上是Azure App Fabric Caching,它與.NET 4和Azure一起被添加。它是一個分佈式羣集緩存解決方案,用於集羣和雲計算。然而,Memcached也已經存在了很長一段時間(我認爲,2003年是這樣),所以已經很成熟了,並被認爲是評判其他人的基準。 Memcached也被移植到那裏的所有語言,並可以在Linux或Windows服務器上運行。 Azure緩存還是比較新的,所以還沒有很多人真正使用它。

+1

Azure應用結構緩存鏈接不起作用 –

相關問題