ASP.NET缓存——CacheDependency用法

最近有在研究缓存这个东西,所以在网上看到不少的介绍文章,于是,我就结合别人的经验再加上自己的理解弄了这篇文章。系列目录下的文章都应该是原作者的

。至于对缓存有更全面的理解的话,你可以看这篇文章http://blog.csdn.net/wayne20018891/article/details/7265453


系列目录:

SqlDependency缓存用法

Asp.net使用SqlDependency

SqlCacheDependency使用命令通知使缓存无效

CacheDependency用法

AggregateCacheDependency 用法

SqlCacheDependency使用轮流检测技术(轮询)使缓存无效

-------------------------------------------------------------------------------------------

 

      按Msdn解释,CacheDependency在存储于 ASP.NET 应用程序的 Cache 对象中的项与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。CacheDependency 类监视依附性关系,以便在任何这些对象更改时,该缓存项都会自动移除。

 

    CacheDependency有几中重载,各作用如下。

    //假设缓存的来源文件是当前目录下的data.xml文件

    //缓存依赖的文件路径

    CacheDependency mydep  =   new  CacheDependency( " data.xml " );

    //缓存依赖的文件可以有多个

    CacheDependency mydep1 = new  CacheDependency( new   string  []{ " data.xml " , " data1.xml " });

    //检查缓存依赖更改的依据时间

    CacheDependency mydep2  =   new  CacheDependency( " data.xml " , DateTime.Now);

    //检查多个依赖文件更改的依据时间

    CacheDependency mydep3  =   new  CacheDependency( new   string [] {  " data.xml " " data1.xml "  }, DateTime.Now);

    //检查依赖多个文件,也依赖多个缓存键值

    CacheDependency mydep4  =   new  CacheDependency( new   string [] {  " data.xml " " data1.xml "  },
        
new   string [] {  " Category " " Category1 "  });

    //关联依赖,还可以依赖于另一个文件缓存依赖

    CacheDependency mydep5  =   new  CacheDependency( new   string [] {  " data.xml " " data1.xml "  },
        
new   string [] {  " Category " " Category1 "  }, mydep);

    //文件和键值上次修改的依据时间

    CacheDependency mydep6  =   new  CacheDependency( new   string [] {  " data.xml " " data1.xml "  },
        
new   string [] {  " Category " " Category1 "  }, DateTime.Now);

    //文件、另一个缓存依赖和键值上次修改的依据时间

    CacheDependency mydep6  =   new  CacheDependency( new   string [] {  " data.xml " " data1.xml "  },
new   string [] {  " Category " " Category1 "  }, mydep,DateTime.Now);

 

例子

    用CacheDependency监控一个XML文件。当XML文件变更时清除缓存,然后重新取得数据。方法如下。

    新建一个Asp.Net应用程序。在App_Data中建立一个XML文件,名为XmlData.XML。内容如下:

[html] view plain copy
print ?
  1. xml version="1.0" encoding="utf-8" ?>  
  2. <book>  
  3.   <item>  
  4.     <bookName>C#开发bookName>  
  5.     <author>陈AAauthor>  
  6.   item>  
  7.   <item>  
  8.     <bookName>Ado.net开发bookName>  
  9.     <author>陈BBauthor>  
  10.   item>  
  11. book>  
  12.   
  13.    


  
    C#开发
    陈AA
  
  
    Ado.net开发
    陈BB
  


 

 

    新建一个aspx文件,名子为CacheDependencyPage.aspx。在页面放一个GridView,命名为gvData用于显示XML数据。编写后台代码,如下:


[csharp] view plain copy
print ?
  1. using System.Data;  
  2. using System.Web.Caching;  
  3.   
  4. namespace SqlDependencyInAspNet  
  5. {  
  6.     public partial class CacheDependencyPage : System.Web.UI.Page  
  7.     {  
  8.         protected void Page_Load(object sender, EventArgs e)  
  9.         {  
  10.             if (!IsPostBack)  
  11.             {  
  12.                 GetData();  
  13.             }  
  14.         }  
  15.   
  16.         private void GetData()  
  17.         {  
  18.             DataTable tableData = new DataTable();  
  19.             if (Cache["data"] == null)  
  20.             {  
  21.                 DataSet ds = new DataSet();  
  22.                 string filePath = Server.MapPath("~/App_Data/XmlData.xml");  
  23.                 ds.ReadXml(filePath);  
  24.                 tableData = ds.Tables[0];  
  25.                 CacheDependency cdy = new CacheDependency(filePath);  
  26.                 Cache.Insert("data", tableData, cdy);  
  27.                 if (cdy.HasChanged)  
  28.                 {  
  29.                     System.Diagnostics.Debug.WriteLine("Xml已变更");  
  30.                 }  
  31.             }  
  32.             else  
  33.             {  
  34.                 tableData = (DataTable)Cache["data"];  
  35.             }  
  36.             gvData.DataSource = tableData;  
  37.             gvData.DataBind();  
  38.         }  
  39.     }  
  40. }  
using System.Data;
using System.Web.Caching;

namespace SqlDependencyInAspNet
{
    public partial class CacheDependencyPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetData();
            }
        }

        private void GetData()
        {
            DataTable tableData = new DataTable();
            if (Cache["data"] == null)
            {
                DataSet ds = new DataSet();
                string filePath = Server.MapPath("~/App_Data/XmlData.xml");
                ds.ReadXml(filePath);
                tableData = ds.Tables[0];
                CacheDependency cdy = new CacheDependency(filePath);
                Cache.Insert("data", tableData, cdy);
                if (cdy.HasChanged)
                {
                    System.Diagnostics.Debug.WriteLine("Xml已变更");
                }
            }
            else
            {
                tableData = (DataTable)Cache["data"];
            }
            gvData.DataSource = tableData;
            gvData.DataBind();
        }
    }
}


     测试,运行程序,页面上会显示XML中的数据,后台会缓存当前取出的数据。刷新页面时会中缓存中取数据。然后修改XML文件中的内容,再次刷新,缓存会被删除,然后重新取得XML中的内容。

你可能感兴趣的:(ASP.NET缓存——CacheDependency用法)