四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

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

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

  緩存真是個(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)題.

  文中代同學(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>");

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

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

主站蜘蛛池模板: 免费看黄网址| 在线播放免费视频播放| 生死搏斗| 电影《大突围》完整版| 又见阿郎电视剧免费观看| 上门女婿电影完整版免费| 浙江卫视全天节目单| 美丽的坏女人中文字幕| 新闻女郎| 今年过年时间| 潘霜霜惊艳写真照| 夜半2点钟| 违规吃喝研讨发言材料| 垃圾分类视频宣传片| 库里高清壁纸| 欲望之夜| 基尼斯和吉尼斯有什么区别| 龟兔赛跑的故事视频| 舔了师兄十年| 战长沙每个人的结局| 山海经动画片全40集免费观看| 电影《此时此刻》| 碑文格式范例 墓碑图片| 迷宫的十字路口讲了什么| 77316电影| 你从草原走来| 恩齐| 极寒之城剧情详细介绍| 闵允渡李秀主演电影| 最贵的烟前十名| 无耻之徒豆瓣| 日本大片ppt免费ppt2024| 红色诗集诗配画竖版| 爱情岛视频论坛| 变形记开头结尾优美段落| 吉泽明步番号| 无内秘书| tifosi| 张美仁爱| 保镖电影在线完整观看| 黄网站免费在线观看|