系列目录:
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
>
陈宽田
</
author
>
</
item
>
<
item
>
<
bookName
>
Ado.net开发
</
bookName
>
<
author
>
陈成城
</
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中的内容。