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。内容如下:
<?xml version="1.0" encoding="utf-8" ?> <book> <item> <bookName>C#开发</bookName> <author>陈AA</author> </item> <item> <bookName>Ado.net开发</bookName> <author>陈BB</author> </item> </book>
新建一个aspx文件,名子为CacheDependencyPage.aspx。在页面放一个GridView,命名为gvData用于显示XML数据。编写后台代码,如下:
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中的内容。