asp.net SAF 中缓存服务的实现第4/5页

 更新时间:2008年08月08日 21:28:49   作者:  
对缓存的兴趣源于张子阳写的一篇文章《SAF 中缓存服务的实现》中的一个例子:

最后的两个方法,GetItem()和GetList()分别用于从缓存中获取单个或者多个对象。值得注意的是当使用GetList()方法时,Xpath应该为到达一个组结点的路径。 
复制代码 代码如下:

// 根据 XPath 获取对象    
// 先根据Xpath获得对象的Key,然后再根据Key获取实际对象    
public virtual object GetItem(string xpath) {    

    object obj = null;    
    xpath = PrepareXPath(xpath);    
    XmlNode node = rootMap.SelectSingleNode(xpath);    

    if (node != null) {    
       // 获取对象的Key    
       string key = node.Attributes["key"].Value;    

       // 获取实际对象    
       obj = cacheStrategy.GetItem(key);    
    }    
    return obj;    
}    

// 获取一组对象,此时xpath为一个组结点    
public virtual object[] GetList(string xpath) {    
    xpath = PrepareXPath(xpath);    

    XmlNode group = rootMap.SelectSingleNode(xpath);    

    // 获取该结点下的所有子结点(使用[@key]确保子结点一定包含key属性)    
    XmlNodeList results = group.SelectNodes(xpath + "/*[@key]");    

    ArrayList objects = new ArrayList();    

    string key;    

    foreach (XmlNode result in results) {    
       key = result.Attributes["key"].Value;    
       Object obj = cacheStrategy.GetItem(key);    
       objects.Add(obj);    
    }    

    return (object[])objects.ToArray(typeof(object));    
}

至此,SAF 的缓存服务的设计和代码实现都完成了,现在我们来看看如何使用它。 

程序测试 
复制代码 代码如下:

static void Main(string[] args) {    

    CacheService.Cache cache = CacheService.Cache.Instance;    

    // 添加对象到缓存中    
    cache.AddItem("/WebApplication/Users/Xin", "customer xin");    
    cache.AddItem("/WebApplication/Users/Jimmy", "customer jimmy");    
    cache.AddItem("/WebApplication/Users/Steve", "customer other");    
    cache.AddItem("/WebApplication/GlobalData", "1/1/2008");    
    cache.AddItem("/Version", "v10120080401");    
    cache.AddItem("/Site", "TraceFact.Net");    

    // 获取所有User    
    object[] objects = cache.GetList("/WebApplication/Users");    
    foreach (object obj in objects) {    
       Console.WriteLine("Customer in cache: {0}", obj.ToString());     
    }    

    // 删除所有WebApplication下所有子孙结点    
    cache.RemoveItem("/WebApplication");    

    // 获取单个对象    
    string time = (string)cache.GetItem("/WebApplication/GlobalData");    
    string name = (string)cache.GetItem("/WebApplication/Users/Xin");    

    Console.WriteLine("Time: {0}", time);// 输出为空,WebApplication下所有结点已删除    
    Console.WriteLine("User: {0}", name);// 输出为空, WebApplication下所有结点已删除    

   
    // 获取根目录下所有叶结点    
    objects = cache.GetList("/");    
    foreach (object obj in objects) {    
       Console.WriteLine("Object: {0}", obj.ToString());    
    }    

    Console.ReadLine();    


输出的结果为: 
Customer in cache: customer xin 
Customer in cache: customer jimmy 
Customer in cache: customer other 
Time: 
User: 
Object: v10120080401 
Object: Trace

相关文章

  • Excel自定义关闭按钮实现代码

    Excel自定义关闭按钮实现代码

    这篇文章主要介绍了Excel自定义关闭按钮实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • .net开发微信公众平台实例教程

    .net开发微信公众平台实例教程

    这篇文章主要介绍了.net开发微信公众平台的方法,对微信公众平台开发的原理与相应的.net实现方法都做了较为详细的讲述,非常实用,需要的朋友可以参考下
    2014-10-10
  • .Net 调用存储过程取到return的返回值

    .Net 调用存储过程取到return的返回值

    存储过程只能返回 int 类型,如果返回一个字符串 ,将会报类型转化错误,下面以示例介绍下如何取到return的值,需要的朋友可以参考下
    2014-08-08
  • ASP.NET C#生成下拉列表树实现代码

    ASP.NET C#生成下拉列表树实现代码

    下拉列表树很方便且时尚的一个导航,貌似很多的朋友都想实现这样一个列表树,本文将满足你们的设想,通过本文你们可以学到如何使用c#生成下拉列表树,感兴趣的你可不要错过了啊
    2013-02-02
  • ASP.NET数据绑定之DataList控件

    ASP.NET数据绑定之DataList控件

    这篇文章主要为大家介绍了ASP.NET数据绑定中的DataList控件,DataList控件以表的形式呈现数据,通过该控件,您可以使用不同的布局来显示数据记录,对DataList控件感兴趣的小伙伴们可以参考一下
    2016-01-01
  • ASP.NET Core 3.0轻量级角色API控制授权库

    ASP.NET Core 3.0轻量级角色API控制授权库

    这篇文章介绍了ASP.NET Core 3.0轻量级角色API控制授权库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • ASP.NET Core中如何实现重定向详解

    ASP.NET Core中如何实现重定向详解

    这篇文章主要给大家介绍了关于ASP.NET Core中如何实现重定向的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 用Html5与Asp.net MVC上传多个文件的实现代码

    用Html5与Asp.net MVC上传多个文件的实现代码

    Html 5 的有一些File API,对Form表单增强的特性,让我们轻松支持多文件上传,看下面的Html片断代码
    2012-08-08
  • .NET 中的装箱与拆箱实现过程

    .NET 中的装箱与拆箱实现过程

    本文分别介绍装箱(boxing)与拆箱(unboxing)的实现过程,感兴趣的朋友可以了解下
    2013-01-01
  • ASP.NET DataTable去掉重复行的2种方法

    ASP.NET DataTable去掉重复行的2种方法

    这篇文章主要介绍了ASP.NET DataTable去掉重复行的2种方法,本文直接给出去重代码,需要的朋友可以参考下
    2015-02-02

最新评论