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

  • 相关阅读:
    什么是语义化的HTML?有何意义?为什么要做到语义化?
    Doctype作用?严格模式与混杂模式如何区分?它们有何差异?
    js和jq中常见的各种位置距离之offsetLeft和position().left的区别(四)
    js和jq中常见的各种位置距离之offset和offset()的区别(三)
    js和jq中常见的各种位置距离之offset()和position()的区别(二)
    js和jq中常见的各种位置距离之offsetLeft/clientLeft/scrollLeft (一)
    剖析js中的数据类型
    js数组去重几种方法
    SSE and Websocket
    鲜为人知的空元素╮(╯▽╰)╭
  • 原文地址:https://www.cnblogs.com/scottckt/p/1966049.html
Copyright © 2020-2023  润新知