zoukankan      html  css  js  c++  java
  • CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)

    按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

  • 相关阅读:
    Git修改用户名和提交的邮箱
    在vue项目中引入bootstrap
    自定义radio,使用图片进行切换(点击切换时,获取变量值)
    nodejs知识清单
    swoft源码研究
    Nginx变量查询
    mongodb索引
    mongodb数据备份:导入导出
    mongodb主从复制和分片
    mongodb服务安装
  • 原文地址:https://www.cnblogs.com/joeylee/p/3012832.html
Copyright © 2011-2022 走看看