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

=======================

您可以使用 absoluteExpiration parameter 参数和 slidingExpiration 参数将设有到期策略的项添加到 Cache 中。您可以定义绝对过期时间或弹性过期时间,但不能同时定义两者。在使用上述参数之一定义到期策略时,必须将另一个参数设置为零。Cache 类定义了两个自动执行该操作的字段:NoAbsoluteExpirationNoSlidingExpiration。当定义绝对或弹性过期时间时,只要将适当的参数设置为其相应的字段值即可。下面的示例使用 Insert 方法将设有两分钟绝对到期时间的项添加到 Cache 中。

1:  Cache.Insert("key","value",null,DateTime.Now.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration)
2:   

 1:  /// <summary>
 2:          /// 
 3:          /// </summary>
 4:          /// <param name="CacheKey">缓存key</param>
 5:          /// <param name="objObject">保存的对象</param>
 6:          /// <param name="objDependency">缓存依赖项,可以是一个文件,也可以是针对另外一个缓存</param>
 7:          /// <param name="AbsoluteExpiration">绝对过期时间(与弹性时间二者取一)</param>
 8:          /// <param name="SlidingExpiration">弹性过期时间,也就是在没有过期的情况下,你每次访问,都会延长重新计时(与绝对过期时间二者取一)</param>
 9:          public static void SetCache(string CacheKey, object objObject, CacheDependency objDependency,DateTime AbsoluteExpiration, TimeSpan SlidingExpiration)
10:          {
11:              Insert(CacheKey, objObject, objDependency, AbsoluteExpiration, SlidingExpiration);
12:          }
13:   
14:   

1:  private static void Insert(string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration)
2:          {
3:   
4:              objCache.Insert(CacheKey, objObject, objDependency, AbsoluteExpiration, SlidingExpiration);
5:          }
6:   

更详细的信息请查看

http://www.cnblogs.com/aierong/archive/2004/07/15/24653.html  推荐

http://www.cnblogs.com/smhy8187/articles/971712.html

CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)...相关推荐

  1. 缓存依赖中cachedependency对象

    缓存依赖主要提供以下功能: 1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存. 2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项. 3.可以在网络园(一台服务器上存在多 ...

  2. System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...

  3. 为memcached增加缓存依赖的程序实现

    节前的一篇文章中提出了为memcached增加缓存依赖的初步设想,本文对第一个思路进行实现. 实现思路 key1发生变化时,不立即移除 key2,key3.在每次返回key2,key3对象时检查key ...

  4. ASP.NET 数据库缓存依赖

    By Peter A. Bromberg, Ph.D. 在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cach ...

  5. Android stdio build.gradle buildscript 里面的repositories 和allprojects里面 repositories 的区别

    第一段 buildscript 里面的 repositories 表示只有编译工具才会用这个仓库. 比如 buildscript 里面的 dependencies classpath 'com.and ...

  6. 【状态保持】Cache 基于SQL 数据库 的缓存依赖 轮询机制详解

    首先声明一下如果您还不了解什么是Cache(缓存)请您先搜一下有关信息然后再看这篇文章. 当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过两种途径获 ...

  7. 关于mybatis里面的Executor--转载

    原文地址:http://blog.csdn.net/w_intercool/article/details/7893344 使用mybatis查寻数据,跟踪其执行流程 最开始执行的语句 [java]  ...

  8. nginx里面的rewrite重写模块详解

    文章目录 前言 Rewrite Rewrite实用场景 Nginx正则表达式(又有正则了啊) Rewrite命令 last和break比较有什么不同? Location模块 location有哪些分类 ...

  9. 面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官

    面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官 外观模式 介绍 实现 步骤 1 Shape.java 步骤 2 Rectangle.java Square.java Circle ...

最新文章

  1. vue 导航栏刷新页面定位:
  2. 大数据学习,Hive是丢不掉的!Hive练习题50道,你也试试!
  3. 为什么我们需要使用Pandas新字符串Dtype代替文本数据对象
  4. 线程池是如何重复利用空闲的线程来执行任务的?
  5. oracle支持非关系数据库,Oracle-03: 关系型数据库和非关系的数据库的各自优缺点与区别...
  6. 揭秘阿里中台!一文看懂阿里推荐业务的两大利器 | 赠书
  7. maven 单独构建多模块项目中的单个模块
  8. C语言函数声明与定义(待删除)
  9. LeetCode(303)——区域和检索 - 数组不可变(JavaScript)
  10. python免费领取视频-最经典Python爬虫全套视频免费领,带你从0开始学爬虫
  11. mysql 查询每个班级的前三名
  12. NRF52832-USB-Dangle-DIY笔记
  13. 学术论文写作方法和技巧
  14. 依图科技:多个人工智能应用领域达到全球领先水平 | 百万人学AI评选
  15. 无法修改linux密码Authentication token manipulation error 问题解决
  16. ipad协议835最新版
  17. java函数参数使用冒号_java8中:: 用法示例(JDK8双冒号用法)
  18. 【阿里云-容器】阿里云容器服务Kubernetes版快速入门
  19. 用python做名片管理器_Python简单的名片管理器
  20. 高低温湿热试验箱的简介

热门文章

  1. 在windows XP运行3660路由器仿真器
  2. Vue:对象更改检测注意事项
  3. centos7下搭建git和gitlab版本库
  4. 翻译:MariaDB RENAME TABLE语句
  5. Microsoft.Data.ConnectionUI.DataConnectionDialog
  6. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案
  7. Windows Phone开发(48):不可或缺的本地数据库
  8. 跨平台图表控件TeeChart使用教程:导入XML数据
  9. php获取svn文件,然后ftp上传服务器代码
  10. 第四课:算法效率的度量和存储空间需求