天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Discuz!NT 緩存設計簡析 [原創]

       作為一個社區類型軟件,大并發支持和高效穩定運行永遠是“硬道理”,而有效安全的使用緩存恰恰能起到事倍功半的效果。而.NET本身所提供的緩存機制又顯得過于“單薄”,比如說訂制不太靈活方便, 緩存對象之間層次感不強, 使用時缺乏統一的管理等等。   
       Discuz!NT緩存產生背景:
       在去年五月份我加入Discuz!NT項目組時,發現這個項目當時還未使用緩存機制。主要原因是項目還處于起步階段,很多東西還只是有想法,但未付諸實施,或還沒找到合適的方案, 而緩存就是其中一個到底該不該使用,如果使用的該到底能多大程度緩解數據庫壓力以及開發成本的東西。
       我當時正好有一個比較好的“原型”(從一本書上看到的源碼),也就是今天Discuz!NT所使用的緩存機制的雛形,但當時它在功能上還很不健全且存在一些“致命的” BUG, 但實現簡單的緩存數據對象還是綽綽有余的,于是我通過一個簡單的測試用例(緩存數據表和StringBuilder對象)和雪人一起討論并分析后得到一些數據,基本上肯定了使用緩存解決對數據庫象中經常訪問但又不經常更新的數據進行緩存的使用方案,同時也要求這個緩存機制要使用起來盡可能的簡單,同時功能擴展要非常方便。
       因此本人就在這個“原型”的基本上進行了一段時間的功能擴展和BUG修正才得到今天大家所看到的這部分代碼。
       現在將Discuz!NT的緩存架構說明如下,先請大家看一下Discuz!NT架構圖:

         
       其實這個構架說白了就是一個標準的“策略”模式,為了對比方便,我把策略模式的結構圖放在下面:


        里面的DNTCache就是“策略”模式的應用場景,而DefaultCache , ForumCache,RssCache等等就是相應的具體策略,每一種策略都會對.NET所提供的緩存機制進行一番“訂制”,以實現不同的用途。比如系統DefaultCache在對象到期時提供數據再次加載機制,而ForumCache不使用這種機制,另外還有緩存的到期時間幾種策略也各不相同,這都是根據具體的應用場景"量身訂制"的。
        說到這里,您所要做的就是下載一份源碼按上圖索驥就可以把整個緩存機制搞清楚。

        下面對緩存設計所采用的幾種技術做一下簡要說明。包括XML,XPATH ,"單件模式" 以及跨web園共享數據。
        首先請看一下代碼:(xml xpath)

 1 //要存取的xpath格式路徑
 2 //要緩存的對象
 3 public virtual void AddObject(string xpath, object o ,string[] files)
 4 {
 5  
 6  //整理XPATH表達式信息
 7  string newXpath = PrepareXpath(xpath);
 8  int separator = newXpath.LastIndexOf("/");
 9  //找到相關的組名
10  string group = newXpath.Substring(0,separator  );
11  //找到相關的對象
12  string element = newXpath.Substring(separator + 1);
13    
14  XmlNode groupNode = objectXmlMap.SelectSingleNode(group);
15  //建立對象的唯一鍵值, 用以映射XML和緩存對象的鍵
16  string objectId="";
17 
18  XmlNode node = objectXmlMap.SelectSingleNode(PrepareXpath(xpath));
19  if ( node != null)
20  {
21   objectId = node.Attributes["objectId"].Value;
22  }
23  if(objectId=="")
24  {
25   groupNode = CreateNode(group);
26   objectId= Guid.NewGuid().ToString();
27   //建立新元素和一個屬性 for this perticular object
28   XmlElement objectElement = objectXmlMap.OwnerDocument.CreateElement(element);
29   XmlAttribute objectAttribute =objectXmlMap.OwnerDocument.CreateAttribute("objectId");
30   objectAttribute.Value = objectId;
31   objectElement.Attributes.Append(objectAttribute);
32   //為XML文檔建立新元素
33   groupNode.AppendChild(objectElement);
34  }
35  else
36  {
37   //建立新元素和一個屬性 for this perticular object
38   XmlElement objectElement = objectXmlMap.OwnerDocument.CreateElement(element);
39   XmlAttribute objectAttribute =objectXmlMap.OwnerDocument.CreateAttribute("objectId");
40   objectAttribute.Value = objectId;
41   objectElement.Attributes.Append(objectAttribute);
42   //為XML文檔建立新元素
43   groupNode.ReplaceChild(objectElement,node);
44  }
45  //向緩存加入新的對象
46  cs.AddObjectWithFileChange(objectId,o,files);
47  
48 }
49 

NET技術Discuz!NT 緩存設計簡析 [原創],轉載需保留來源!

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

主站蜘蛛池模板: 极品虎白在线观看 | 蜜柚免费视频高清观看在线 | 欧美成人性色生活18黑人 | 日韩一本在线 | 第一次破女初国产美女 | 亚洲美女视频高清在线看 | 巨乳中文无码亚洲 | 毛片无码免费无码播放 | 欧美一区二区VA毛片视频 | 91久久精品一区二区三区 | 全黄H全肉细节文NP 全黄h全肉细节全文 | 欧美精品乱码99久久蜜桃 | 亚洲欧美中文日韩视频 | 精品久久久久久久国产潘金莲 | 涩涩免费网站 | 天天综合网网欲色 | 久久天天躁狠狠躁夜夜呲 | 久久久久综合网久久 | 亚洲色欲国产免费视频 | 蜜桃传媒在线观看 | 午夜福利合集1000在线 | 97伦理电影在线不卡 | 国产盗摄一区二区 | 无码精品AV久久久奶水 | 99热视频这里只有久久精品 | 穿白丝袜边走边尿白丝袜 | 国产亚洲精品字幕在线观看 | 两个吃奶一个添下面视频 | 国产免费不卡 | 乳色吐息未增删樱花ED在线观看 | 亚洲精品九色在线网站 | 成人在线高清不卡免费视频 | 国产盗摄一区二区三区 | 精品久久中文字幕有码 | 色综合久久五月 | 精品亚洲国产成AV人片传媒 | 贵妃高h荡肉呻吟np杨玉环 | 国产精品自产拍在线观看中文 | 九九热这里只有精品视频免费 | 99热久这里都是精品小草 | 怡红院美国分院一区二区 |