哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開(kāi)發(fā)

本站首頁(yè) 軟件開(kāi)發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開(kāi)發(fā)公司 >> .Net技術(shù) >> 文章正文

.Net下的分布式緩存

      緩存真是個(gè)好東西,在大型的系統(tǒng)中可以有效地提升系統(tǒng)的速度,此乃廢話(huà)就不多說(shuō)了,在.Net 平臺(tái)下面我把緩存從功用大致分為兩類(lèi),數(shù)據(jù)對(duì)象緩存和頁(yè)面輸出緩存. 對(duì)于數(shù)據(jù)緩存來(lái)講是由System.Web.Caching.Cache這個(gè)類(lèi)來(lái)實(shí)現(xiàn),可以從上下文對(duì)象Context.Cache 來(lái)獲取這個(gè)對(duì)象的引用.而頁(yè)面/控件輸出緩存則是由.Net環(huán)境在運(yùn)行時(shí)依據(jù)頭部的緩存申明來(lái)控制緩存策略. 本文主要論證與數(shù)據(jù)緩存相關(guān)的一些應(yīng)用與問(wèn)題. 新疆軟件開(kāi)發(fā)網(wǎng) www.pg11qqq.com
文中代同學(xué)提到了"無(wú)法跨Web園共享數(shù)據(jù)的問(wèn)題",雖然提到解決方案就是使用XML文件來(lái)存放緩存的鍵值,這里有一個(gè)疑惑,就是.Net的Web園既然是進(jìn)程獨(dú)立的又何來(lái)共享之說(shuō)呢,真要是這樣的話(huà)即便是通過(guò)XML文檔寫(xiě)入緩存鍵值緩存的對(duì)象也不能同時(shí)在兩個(gè)進(jìn)程中共享,而這里獲得的好處僅是避免了在其它的進(jìn)程中讀到了已在當(dāng)前進(jìn)程中失效的“臟”緩存數(shù)據(jù),這樣的話(huà)開(kāi)幾個(gè)Web園就會(huì)產(chǎn)生幾個(gè)緩存的對(duì)象對(duì)系統(tǒng)資源的利用系就比較低了. 如果是用Web場(chǎng)布署的話(huà)浪費(fèi)就更多了,也許是還少有論壇達(dá)到這樣的規(guī)模故不在設(shè)計(jì)能力的范圍中吧.CommunityServer也是使用了這個(gè)系統(tǒng)對(duì)象,并對(duì)它作了一些包裝形成了CommunityServer.Components.CSCache這個(gè)類(lèi),還是不錯(cuò)的,可以在項(xiàng)目中選擇使用.

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

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

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

好了,讓我們?cè)倩仡^看看Discuz!NT在頁(yè)面緩存上有些什么高招.

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

模版文件內(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>");
 
這里的this.yourname對(duì)應(yīng)著相應(yīng)頁(yè)面后臺(tái)類(lèi)里面的一個(gè)屬性,由程序在運(yùn)行時(shí)進(jìn)行初始化賦值,這樣最后得到的頁(yè)面執(zhí)行結(jié)果就可以從這個(gè)templateBuilder對(duì)象的ToString()方法得到, templateBuilder也就是一個(gè)頁(yè)面后臺(tái)類(lèi)里面的StringBuilder類(lèi)的實(shí)例,最后在頁(yè)面執(zhí)行完畢后的OnLoad事件中根據(jù)不同的頁(yè)面類(lèi)型,如首頁(yè),頻道首頁(yè),內(nèi)容頁(yè)等, 使用不同的緩存策略將頁(yè)面執(zhí)行結(jié)果的HTML代碼插入到緩存中,下一個(gè)請(qǐng)求進(jìn)來(lái)的時(shí)候在進(jìn)入頁(yè)面生命周期之前的HttpModule(這里面還包含地址重寫(xiě)功能代碼)中判斷這個(gè)緩存是否有效,直接從內(nèi)存讀取緩存發(fā)回客戶(hù)端.這樣速度當(dāng)然就快了, 頁(yè)面上看到的執(zhí)行時(shí)間自然是0ms. 不過(guò)對(duì)于登陸用戶(hù)來(lái)說(shuō)由于要顯示不同的登陸信息所以不能使用匿名的緩存文件版本,所以說(shuō)一旦你登陸頁(yè)面才會(huì)真正執(zhí)行一次,但是上面要顯示的數(shù)據(jù)都有獨(dú)立的緩存項(xiàng),所以?xún)H僅是重新組裝一次頁(yè)面代碼罷了,速度還是比較快的,在官方論壇上看到首頁(yè)加載時(shí)間是15ms, 夠快的了. 愚以為連這個(gè)時(shí)間其實(shí)也是可以再節(jié)省節(jié)省的. 比如用戶(hù)登陸信息這部分東西可以生成一段JS, 在向?yàn)g覽器發(fā)出了匿名用戶(hù)的緩存版本時(shí)再判斷如果用戶(hù)登陸了就追加這樣一段JS代碼,在里面去把相應(yīng)的HTML替換掉就可以了,也可以使用AJAX技術(shù)在客戶(hù)端去取,這樣就解決了已登陸用戶(hù)和未登陸用戶(hù)在共享緩存版本上的問(wèn)題,至少在首頁(yè)這一級(jí)是可以的吧,其它的主要頁(yè)面不好說(shuō)應(yīng)該也差不多,俺對(duì)論壇程序的流程不是很了解.

從另一個(gè)角度講已登陸用戶(hù)不應(yīng)該速度比匿名用戶(hù)還慢吧~~~;)

HOHO,終于完成了,先寫(xiě)這些吧。聊點(diǎn)別的`~~總體上看俺覺(jué)得實(shí)用的就是最好的,不要說(shuō)DNT的設(shè)計(jì)有多爛多爛,層次結(jié)構(gòu)多不合理,代碼多不OO,但是在這樣一個(gè)特定的應(yīng)用環(huán)境下它提供了一種相對(duì)靈活和高速的解決的方案,我覺(jué)得就是一個(gè)正確的選擇。量體裁衣做出來(lái)的東西雖然可維護(hù)可重用性較差還是有它的好處的,俺自己也比較傾向于這種針對(duì)性很強(qiáng)的解決方案思路,希望DNT能做得更好~~~正如BlogEngine這樣的程序,它幾乎將很多的數(shù)據(jù)都Load到內(nèi)存里面,數(shù)據(jù)存儲(chǔ)默認(rèn)的也是XML的存儲(chǔ)方式,你很難去講它是一個(gè)糟糕的程序,因?yàn)樗刑囟ǖ膽?yīng)用場(chǎng)景,合適的才是最好的~~~~

作者:未知 | 文章來(lái)源:未知 | 更新時(shí)間:2007-10-29 14:32:20

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    軟件開(kāi)發(fā)中項(xiàng)目經(jīng)理有那些職責(zé)
    “七分選型,三分軟件”的ERP法則
    C++函數(shù)對(duì)象count_if
    語(yǔ)法C# 問(wèn)關(guān)鍵字之:base、this
    優(yōu)化Ajax 為網(wǎng)站減負(fù)
    復(fù)制SQL 數(shù)據(jù)庫(kù)時(shí)的問(wèn)題
    認(rèn)識(shí)Java中native方法
    p2p軟件如何穿透內(nèi)網(wǎng)進(jìn)行通信
    在桌面中嵌入窗體
    軟件程序編寫(xiě)者的思路需要變化
    軟件技術(shù)
    · 開(kāi)發(fā)語(yǔ)言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫(kù)開(kāi)發(fā)
    最新文章  
    ·.net技術(shù) asp.net MVC3 Vi
    ·.net將視頻文件格式轉(zhuǎn)換成
    ·NET Framework 2.0 Servic
    ·如何動(dòng)態(tài)修改winform的app
    ·asp,net軟件結(jié)構(gòu)設(shè)計(jì)和相關(guān)
    ·學(xué)習(xí)怎樣使用ASP.NET中的虛
    ·,net基礎(chǔ)類(lèi)的學(xué)習(xí):system
    ·.net學(xué)習(xí):c#事件的深入分
    ·Facade Pattern學(xué)習(xí)總結(jié)
    ·C#如何設(shè)置或者獲取目錄的
    ·如何使用XSL來(lái)定義ASP.NET
    ·理解WCF Data Contract契約
    ·如何能在.net2.0開(kāi)發(fā)的控件
    ·模式怎樣使用,講解模式的
    ·如何解決Menu菜單被frame遮
    關(guān)于我們 | 軟件開(kāi)發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開(kāi)發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開(kāi)發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000