成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.Net平臺下的分布式緩存設(shè)計(jì)

開發(fā) 后端 分布式
緩存在大型的系統(tǒng)中可以有效地提升系統(tǒng)的速度,本文主要論證與數(shù)據(jù)緩存相關(guān)的一些應(yī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)用與問題。

有人提到了"無法跨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è)計(jì)能力的范圍中吧。CommunityServer也是使用了這個系統(tǒng)對象,并對它作了一些包裝形成了CommunityServer.Components.CSCache這個類,還是不錯的,可以在項(xiàng)目中選擇使用。

基于這個類的應(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作為緩存鍵的存儲方式倒是一個不錯的想法,這樣在批量移除緩存項(xiàng)的時候就不需要作掃描而直接得到相應(yīng)的緩存鍵值,跟分布式緩存作一個整合應(yīng)當(dāng)是一個不錯的方案。

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

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

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

以下為引用的內(nèi)容:

<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>"); 

生成的文件 show.aspx

以下為引用的內(nèi)容:

templateBuilder.AppendLine(""); 
  templateBuilder.AppendLine("");
  templateBuilder.AppendLine("Hello, Your name is " + this.yourname);
  templateBuilder.AppendLine("");
  templateBuilder.AppendLine("");

這里的this.yourname對應(yīng)著相應(yīng)頁面后臺類里面的一個屬性,由程序在運(yùn)行時進(jìn)行初始化賦值,這樣***得到的頁面執(zhí)行結(jié)果就可以從這個templateBuilder對象的ToString()方法得到, templateBuilder也就是一個頁面后臺類里面的StringBuilder類的實(shí)例,***在頁面執(zhí)行完畢后的OnLoad事件中根據(jù)不同的頁面類型,如首頁,頻道首頁,內(nèi)容頁等, 使用不同的緩存策略將頁面執(zhí)行結(jié)果的HTML代碼插入到緩存中,下一個請求進(jìn)來的時候在進(jìn)入頁面生命周期之前的HttpModule(這里面還包含地址重寫功能代碼)中判斷這個緩存是否有效,直接從內(nèi)存讀取緩存發(fā)回客戶端.這樣速度當(dāng)然就快了, 頁面上看到的執(zhí)行時間自然是0ms. 不過對于登陸用戶來說由于要顯示不同的登陸信息所以不能使用匿名的緩存文件版本,所以說一旦你登陸頁面才會真正執(zhí)行一次,但是上面要顯示的數(shù)據(jù)都有獨(dú)立的緩存項(xiàng),所以僅僅是重新組裝一次頁面代碼罷了,速度還是比較快的,在官方論壇上看到首頁加載時間是15ms, 夠快的了。

我以為連這個時間其實(shí)也是可以再節(jié)省節(jié)省的。比如用戶登陸信息這部分東西可以生成一段JS, 在向?yàn)g覽器發(fā)出了匿名用戶的緩存版本時再判斷如果用戶登陸了就追加這樣一段JS代碼,在里面去把相應(yīng)的HTML替換掉就可以了,也可以使用AJAX技術(shù)在客戶端去取,這樣就解決了已登陸用戶和未登陸用戶在共享緩存版本上的問題,至少在首頁這一級是可以的吧,其它的主要頁面不好說應(yīng)該也差不多,我對論壇程序的流程不是很了解。

從另一個角度講已登陸用戶不應(yīng)該速度比匿名用戶還慢吧。

【編輯推薦】

  1. 淺析.NET平臺編程語言的未來走向
  2. .Net和Java的Socket機(jī)制比較
  3. VB.NET和C#的發(fā)展與動態(tài)語言運(yùn)行時
責(zé)任編輯:楊鵬飛 來源: it168
相關(guān)推薦

2023-02-28 07:01:11

分布式緩存平臺

2022-04-07 17:13:09

緩存算法服務(wù)端

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)

2023-05-05 06:13:51

分布式多級緩存系統(tǒng)

2009-08-17 16:34:21

.NET分布式緩存Memcached

2023-05-12 11:52:21

緩存場景性能

2018-12-14 10:06:22

緩存分布式系統(tǒng)

2013-06-13 11:29:14

分布式分布式緩存

2019-02-18 11:16:12

Redis分布式緩存

2023-10-08 10:49:16

搜索系統(tǒng)分布式系統(tǒng)

2011-05-11 16:42:21

.NET Remoti

2023-01-13 07:39:07

2018-02-07 10:46:20

數(shù)據(jù)存儲

2019-07-04 15:13:16

分布式緩存Redis

2015-09-21 09:20:11

C#Couchbase使用

2009-11-09 09:25:24

Memcached入門

2018-10-29 12:51:35

分布式存儲元數(shù)據(jù)

2019-06-19 15:40:06

分布式鎖RedisJava

2019-09-05 09:02:45

消息系統(tǒng)緩存高可用

2018-05-19 00:26:13

UAI Train分布式訓(xùn)練
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄网站免费观看 | 在线免费观看日本视频 | 久久毛片 | 亚州综合一区 | 黄色一级免费 | 欧美不卡一区 | 毛片在线免费播放 | 精品久久影院 | 欧美日韩久久 | 国产成人福利视频 | 亚洲一区自拍 | 国产午夜精品一区二区三区四区 | 中文字幕在线视频免费视频 | 亚洲视频一区在线观看 | 激情一区二区三区 | 一区二区av| 国产精品久久久久一区二区三区 | 久草视频2 | 黄a在线观看| 国产91在线观看 | 午夜影院在线播放 | 午夜视频在线免费观看 | 国产精品美女久久久久久免费 | 精品久久久久久久久久久久久久 | 天天草草草 | 日韩免| 欧美一区二区免费电影 | av片免费观看 | 日韩精品国产精品 | 天天色图 | 激情网站在线 | www4虎| 福利成人 | 黄色精品 | 久久久蜜臀国产一区二区 | 久久男女视频 | 先锋影音资源网站 | 欧美黄色网 | 岛国毛片在线观看 | 东方伊人免费在线观看 | 日本免费一区二区三区四区 |