快速业务通道

Discuz!NT 缓存设计简析

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11
/建立对象的唯一键值, 用以映射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
 

         为什么要用XML, 主要是为了使用XML中的层次化功能以及相关的结点添加,替换,移除,
还有就是当希望对缓存的结构信息进行“持久化”操作时会很方便等。
         XPATH 便于能过层次表达式(hierarchical expression) 对XML文件进行查找搜索。
        通过上面或其它的类似代码,就可以构建起一个xml树来管理已加入到系统的缓存对象了。


   
         使用"单件模式"模式生成全局唯一的“应用场景”,因为缓存这种东西通常在存储共享
数据时它的效果最好,编码也最容易实现和管理,同时项目本身基本上就是对经常访问但不
经常改变的数据库数据(可看成是共享数据)进行缓存,所以使用单件模式就顺理成章了。
        请看如下代码:


public static DNTCache GetCacheService()
{
  
 if (instance == null)
 {
  lock (lockHelper)
  {
   if (instance == null)
   {
    instance = new DNTCache();
   }
  }
 }

 //检查并移除相应的缓存项
 //注:此处代码为即将发布的2.0版本中的代码类,如果您想了解其中
        //的代码可参见开源版本中的Discuz.Forum.cachefactory.cs文件中
 //相应函数
 instance=CachesFileMonitor.CheckAndRemoveCache(instance);

 return instance;
}

 

        小插曲:

&n

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号