CacheDependency用法

简介:

系列目录:

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中的内容。

分类:  ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/03/12/2955392.html ,如需转载请自行联系原作者
相关文章
|
数据安全/隐私保护
runas的用法
今天同事的电脑安装了一个软件,运行时需要管理员权限,因为是在域环境中,无法提供管理员权限,这种情况可以用到runas。runas命令就是可以在A账户中用B账户运行某个软件。 runas /user:用户名 软件路径 在了解了runas用法后,我先在CMD中输入命令 需要输入账户密码 输入密码成功后就可以运行软件了,检查一下,是以这个用户运行的软件 后来想想运行这个命令每次都要输入管理员密码,这就没什么效果了。
2651 0
|
6月前
|
监控 前端开发 数据库
RACSignal的八种常用用法
RACSignal的八种常用用法
59 0
|
6月前
ThreadHelper用法
ThreadHelper用法
32 0
|
6月前
|
机器学习/深度学习 数据可视化 API
Gymnasium的基本用法
Gymnasium的基本用法
330 0
mailto用法详解
mailto用法详解
525 0
mailto用法详解
propertyIsEnumerable的用法
propertyIsEnumerable用法 语法和功能 obj.propertyIsEnumerable(prop): 判断prop属性是否是obj的可枚举属性
180 0
$.each()的用法
$.each()的用法
241 0
下一篇
无影云桌面