.NET緩存機制探討與比對
相信大多數(shù)開發(fā)人員都比較了解緩存了,很多開發(fā)人員都在軟件開發(fā)中使用了預(yù)定義或自定義的緩存,并從中獲得了預(yù)期的應(yīng)用程序的性能提升.這篇和后續(xù)文章將詳細的介紹與探討.net體系下的緩存實現(xiàn)的機制,并討論它的優(yōu)點與缺點.
.NET緩存機制:使用緩存的實際價值
在kevinhoffman,lonnykruger的書中寫到:開發(fā)人員經(jīng)常需要將數(shù)據(jù)(臨時數(shù)據(jù))臨時存放到一個存儲媒體以便快速訪問.這種臨時數(shù)據(jù)的存儲器叫做緩存.如果開發(fā)人員合理使用緩存,則可以大幅度提高應(yīng)用程序的性能.
上面是一段完美的關(guān)于緩存的定義,就目前而言,迅速而便捷的將數(shù)據(jù)提供給核心處理代碼已成為一個重要的設(shè)計要求。,迅速是為了增強用戶體驗,便捷可以降低系統(tǒng)壓力。而緩存則可以完成任務(wù),雖然不是那么完美。
.NET緩存機制的共同點
形形色色的緩存機制幾乎都有以下一些主要共同點:
1.提供數(shù)據(jù)臨時存儲,緩存數(shù)據(jù)是否存在具有不確定性。
2.可以設(shè)定緩存優(yōu)先級。
3.可以制定緩存依賴,依賴過期則緩存數(shù)據(jù)不可用。
4.緩存的核心是MAP
.NET緩存機制比對之探討
臨時緩存VS持久緩存:
其實從理論上說微軟.net的緩存解決方案是最完美的緩存的實現(xiàn),但是正因為其教科書式的實現(xiàn)使得不少程序員們抱怨個不停。一個可能存在的悖論是:千辛萬苦獲得的數(shù)據(jù)被塞進緩存,因為系統(tǒng)內(nèi)存緊張而被放棄,雖然它是為了緩解壓力而來。這并不是微軟的問題,而是程序員們貪得無厭的胃口和不當(dāng)?shù)氖褂梅绞剿隆?/P>
在很多的開源緩存機制中都采用的持久緩存的方法來實現(xiàn),其實這些與其說是緩存,我覺得更像是一個增強的session,將緩存的優(yōu)先級,緩存依賴機制安裝在其上。開發(fā)起來既簡單又輕松(.net cache 牽涉了大量底層非托管代碼)。
內(nèi)容緩存VS數(shù)據(jù)緩存:
內(nèi)容緩存不是唯一的選擇,數(shù)據(jù)緩存也不是沒有優(yōu)點。雖然性能上稍有不足,但是把數(shù)據(jù)存放在數(shù)據(jù)庫中卻省去了清理緩存 淘寶購物導(dǎo)航 的麻煩,。另一個顯而易見的優(yōu)點是易于負載分配,尤其是我們擁有一個怪獸數(shù)據(jù)庫服務(wù)器時。從實現(xiàn)技術(shù)上來說,麻煩的多線程問題也可以方便的轉(zhuǎn)嫁。在選擇實現(xiàn)內(nèi)容緩存還是數(shù)據(jù)緩存,有很多不得不考慮的因素,花落誰家就看所開發(fā)的程序所特殊要求了.
值得重視的依賴:
.net framework給我們提供了常用的幾個緩存依賴:時間,文件,數(shù)據(jù)庫。但是由于微軟一貫的作分,我們無法創(chuàng)建新類型的依賴(SqlCacheDependency功能何其何其之弱…)。企業(yè)庫自定義依賴是個好主意,我們只需要繼承ICacheItemExpiration接口即可!
【編輯推薦】