一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

.Net下的分布式緩存--從Discuz!NT的緩存設(shè)計談起

  最近拜讀了代振軍同學(xué)寫的關(guān)于Discuz!NT的緩存設(shè)計的一篇文章《Discuz!NT 緩存設(shè)計簡析 [原創(chuàng)]》,頗有些想法,姑且寫在這里讓大家拍磚吧。

  緩存真是個好東西,在大型的系統(tǒng)中可以有效地提升系統(tǒng)的速度,此乃廢話就不多說了,在.NET 平臺下面我把緩存從功用大致分為兩類,數(shù)據(jù)對象緩存和頁面輸出緩存. 對于數(shù)據(jù)緩存來講是由System.Web.Caching.Cache這個類來實(shí)現(xiàn),可以從上下文對象Context.Cache 來獲取這個對象的引用.而頁面/控件輸出緩存則是由.NET環(huán)境在運(yùn)行時依據(jù)頭部的緩存申明來控制緩存策略. 本文主要論證與數(shù)據(jù)緩存相關(guān)的一些應(yīng)用與問題.

  文中代同學(xué)提到了"無法跨Web園共享數(shù)據(jù)的問題",雖然提到解決方案就是使用XML文件來存放緩存的鍵值,這里有一個疑惑,就是.NET的Web園既然是進(jìn)程獨(dú)立的又何來共享之說呢,真要是這樣的話即便是通過XML文檔寫入緩存鍵值緩存的對象也不能同時在兩個進(jìn)程中共享,而這里獲得的好處僅是避免了在其它的進(jìn)程中讀到了已在當(dāng)前進(jìn)程中失效的“臟”緩存數(shù)據(jù),這樣的話開幾個Web園就會產(chǎn)生幾個緩存的對象對系統(tǒng)資源的利用系就比較低了. 如果是用Web場布署的話浪費(fèi)就更多了,也許是還少有論壇達(dá)到這樣的規(guī)模故不在設(shè)計能力的范圍中吧.CommunityServer也是使用了這個系統(tǒng)對象,并對它作了一些包裝形成了CommunityServer.Components.CSCache這個類,還是不錯的,可以在項目中選擇使用.

  基于這個類的應(yīng)注實(shí)現(xiàn)還有EnterpriseLibrary的CacheBlock里面的NullBackingStore方式,但是為了滿足多進(jìn)程/服務(wù)器共程緩存數(shù)據(jù)的需求EntLib還提供了將SQL SERVER作為后端存儲設(shè)備的方案,這樣在性能要求不是太嚴(yán),客戶端連接不是太多的情況下也可以使用這種方式.只需要將EntLib 配置為共享數(shù)據(jù)庫分區(qū)的工作方式即可,所有的CacheManager實(shí)例都有對緩存塊的讀寫權(quán),當(dāng)然你也可配置為只允許一個實(shí)例寫,其它的來讀.

  那么還有沒有更好的辦法呢,其實(shí)是有的. 不過我很奇怪在.NET平臺下居然沒有“原生態(tài)”的分布式緩存解決方案,也許是俺孤陋寡聞吧,有哪位達(dá)人知道的請分享。還好我們有Memcached這東西,它在php平臺上已經(jīng)取得了巨大的成功,是優(yōu)秀的分布式緩存解決方案,可以參看這篇文章 , 大型的站點(diǎn)上應(yīng)該必不可少吧.有舉的同學(xué)可以去看看, 另外還想好一個思路, 就是在EntLib的基礎(chǔ)上作擴(kuò)展實(shí)現(xiàn)IBackingStore 接口從BaseBackingStore派生一個實(shí)現(xiàn)出來,再經(jīng)由Remoting或者ICE這樣的分布式中間件技術(shù)應(yīng)該也可以實(shí)現(xiàn)的類似的功能吧.

  用XML作為緩存鍵的存儲方式倒是一個不錯的想法,這樣在批量移除緩存項的時候就不需要作掃描而直接得到相應(yīng)的緩存鍵值,跟分布式緩存作一個整合應(yīng)當(dāng)是一個不錯的方案。

  好了,讓我們再回頭看看Discuz!NT在頁面緩存上有些什么高招.

  總的說來我是不怎么喜歡.NET2.0提供的頁面輸出緩存功能,主要是不能手動地控制頁面緩存的過期,而使有緩存依賴項似乎也有點(diǎn)不爽。事實(shí)上使用數(shù)據(jù)綁定控件相對來說是比較消耗資源的,同樣的數(shù)據(jù)我用StringBuilder直接拼出來輸出速度要快不少,測試代碼比較簡單我這里就不給了,大家可以自己去測去,Discuz!NT在設(shè)計中也大量地采用了這樣的方法(怪不得速度這么快呢;))。一般來講模版被保存后后臺會在ASPx目錄生成對應(yīng)的頁面文件, 比如你有一個頁面,上面需要顯示一個來訪者的姓名,它的偽代碼看起來可能是這個樣子

  模版文件內(nèi)容show.html:

<html>
<body>
Hello, Your name
is <% yourname %>
</body>
</html>
生成的文件 show.ASPx
templateBuilder.AppendLine(
"<html>");
templateBuilder.AppendLine(
"<body>");
templateBuilder.AppendLine(
"Hello, Your name is " + this.yourname);
templateBuilder.AppendLine(
"</body>");
templateBuilder.AppendLine(
"</html>");

NET技術(shù).Net下的分布式緩存--從Discuz!NT的緩存設(shè)計談起,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲欧美手机在线观看 | 99国产精品九九视频免费看 | 一级做α爱过程免费视频 | vr欧美乱强伦xxxxx | 91九色视频 | 五月激情丁香婷婷综合第九 | 久久免费精品视频 | 成人精品在线观看 | 国产精品成人观看视频网站 | 最新亚洲精品国自产在线 | 激情综合五月亚洲婷婷 | 色一色在线观看视频网站 | 国产精久久一区二区三区 | 久久国产一区二区 | 欧美zooz人禽交免费观看 | 国产成人精品高清在线观看99 | 香蕉97超级碰碰碰碰碰久 | 久久999精品 | 国产中文字幕乱人伦在线观看 | 99久久久久国产精品免费 | 亚洲欧美日韩精品在线 | 亚洲国产成人久久 | 开心激情五月网 | 快射视频欧美 | 人人免费人人专区 | 97精品国产自在现线免费观看 | 米奇7777狠狠狠狠视频影院 | 黄在线观看www免费看 | 色视频在线免费观看 | 手机在线日韩高清理论片 | 五月停停| 精品日韩欧美一区二区三区 | 国产精品免费一区二区三区四区 | 99爱在线精品视频网站 | 婷婷性| 黄色大片久久 | 看全色黄大色黄大片视频 | 色视频在线观看免费 | 六月丁香婷婷天天在线 | 97精品久久久久中文字幕 | 久久综合丝袜长腿丝袜 |