現(xiàn)在一些.NET開(kāi)發(fā)人員開(kāi)始放棄ASP.NET內(nèi)置的緩存機(jī)制,,轉(zhuǎn)而使用Memcached——一種分布式的內(nèi)存緩存系統(tǒng),,其最初是由Danga Interactive公司為L(zhǎng)iveJournal網(wǎng)站而開(kāi)發(fā)。
存的一個(gè)基礎(chǔ)性問(wèn)題就是如何處理過(guò)時(shí)數(shù)據(jù),。當(dāng)運(yùn)行在單獨(dú)的Web服務(wù)器上,,你可以很容易地清除一個(gè)已經(jīng)確認(rèn)被改變了的緩存??上?,ASP.NET沒(méi)有一個(gè)很好的方法來(lái)支持多服務(wù)器。每個(gè)服務(wù)器上的緩存都對(duì)其他緩存的改變一無(wú)所知,。 ASP.NET允許通過(guò)基于文件系統(tǒng)和數(shù)據(jù)庫(kù)表的觸發(fā)器來(lái)作廢一個(gè)緩存,。然而,這也存在問(wèn)題,,比如數(shù)據(jù)庫(kù)觸發(fā)器需要使用昂貴的輪詢(xún),,以及觸發(fā)器本身冗長(zhǎng)的編程。但是,,我們還是有其他的選擇的,。 不像ASP.NET內(nèi)置的緩存機(jī)制,Memcached是一個(gè)分布式的緩存系統(tǒng),。任何Web服務(wù)器都能更新或刪除一個(gè)緩存項(xiàng),,并且所有其他的服務(wù)器都能在下次訪問(wèn)這些緩存項(xiàng)的時(shí)候自動(dòng)獲取到更新的內(nèi)容。這是通過(guò)把這些緩存項(xiàng)存儲(chǔ)在一個(gè)或者多個(gè)緩存服務(wù)器上來(lái)實(shí)現(xiàn)的,。每一個(gè)緩存項(xiàng)都根據(jù)它的關(guān)鍵字的哈希值來(lái)分配到一個(gè)服務(wù)器上,。 表面看來(lái),Memcached針對(duì)ASP.NET的API就像和內(nèi)置的API一樣,。這讓開(kāi)發(fā)人員很容易地轉(zhuǎn)換到Memcached上,,僅僅通過(guò)在代碼中查找和替換即可實(shí)現(xiàn)。 然而僅僅只是讓其運(yùn)行起來(lái)還不夠,,如果要在大型Web Farms(譯者注:大型站點(diǎn))正確地使用還需要注意一些問(wèn)題。Richard Jones寫(xiě)到: 當(dāng)我們添加很多節(jié)點(diǎn)后,,get_multi函數(shù)的有用性在降低——這可能是由于單獨(dú)的頁(yè)面,,需要訪問(wèn)幾乎所有的Memcached實(shí)例。我在某處讀到Facebook(譯者注:現(xiàn)在很火的校園社交網(wǎng)站)把他們的Memcached集群進(jìn)行分割以提高get_multi的性能(例如,,所有用戶(hù)的數(shù)據(jù)都放置在名為mc的子集節(jié)點(diǎn)上),。有人能告訴我這樣做的效果嗎? |
|
來(lái)自: 命運(yùn)之輪 > 《C# and ASP.NET》