深入分析缓存依赖中cachedependency对象及周边小讲

最近正在学缓存依赖,现把一些学习资料整理如下:
缓存依赖主要提供以下功能:
1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存。
2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项。
3.可以在网络园(一台服务器上存在多个处理器)或网络场(多台服务器运行同一应用程序)中使用 SQL 缓存依赖项。
4.与 SQL 缓存依赖项关联的数据库操作比较简单,因此不会给服务器带来很高的处理成本。

现在把与缓存依赖相关的对象集合如下,并对差异性进行了一定程度的分析……
缓存依赖主要由3个核心类来实现:CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency 类是 AggregateCacheDependency 类和 SqlCacheDependency 类的父类。

CacheDependency跟踪缓存依赖项,缓存依赖项可以是应用程序的 Cache 中的文件、目录或与其他对象的键,可用于实现自定义缓存依赖。//对文件可起作用。

SqlCacheDependency类在所有受支持的 SQL Server 版本 (7.0, 2000, 2005) 上监视特定的 SQL Server 数据库表,以便在该表发生更改时,自动从 Cache 中删除与该表关联的项。数据库表发生更改时,将自动删除缓存项,并向 Cache 中添加新版本的项。在使用 SQL Server 2005 数据库时,SqlCacheDependency 类还支持与 System.Data.SqlClient.SqlDependency 类进行集成。使用 SQL Server 2005 的查询通知机制来检测使 SQL 查询结果无效的数据更改。与 SQL 查询关联的任何缓存项都将从 System.Web.Caching.Cache 中移除。在使用 SQL Server 2005 时,可以使用 SqlCacheDependency 类向应用程序的 Cache 添加依赖于 SQL Server 数据库表或 SQL 查询的项。//对数据表的支持

AggregateCacheDependency类监视依赖项对象的集合,以便在任何依赖项对象更改时,该缓存项都会自动移除。数组中的对象可以是CacheDependency或者SqlCacheDependency对象、从 CacheDependency派生的自定义对象或这些对象的任意组合.

AggregateCacheDependency类与CacheDependency类的不同之处在于前者允许您将不同类型的多个依赖项与单个缓存项关联。例如,如果您创建一个从 SQL Server 数据库表和 XML 文件导入数据的页,则可创建一个SqlCacheDependency对象来表示数据库表的依赖项,以及一个CacheDependency来表XML 文件的依赖项。可创建 AggregateCacheDependency类的一个实例,将每个依赖项添加到该类中,而不是为每个依赖项调用 Cache.Insert 方法。然后,可使用单个Insert 调用使该页依赖于 AggregateCacheDependency实例。


代码如下:

其中,本章主要讲述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);

代码如下:

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)//用于引用该项的缓存键。如果缓存改变,则true;详情百度c#的Cache对象!
        {
            DataSet ds = new DataSet();
            string filePath = Server.MapPath("~/App_Data/XMLFile.xml");//服务器数据绝对地址
            ds.ReadXml(filePath);//读取文件内的数据,保存在ds里
            tableData = ds.Tables[0];
            CacheDependency cdy = new CacheDependency(filePath,DateTime.Now);
            Cache.Insert("data", tableData, cdy);//通过使用 Insert(重载Insert方法)方法将项添加到缓存中
            //if (cdy.HasChanged)
            //{
                System.Diagnostics.Debug.WriteLine("Xml已变更");
            //}
        }
        else
        {
            tableData = (DataTable)Cache["data"];//通过指定其键和值将项添加到缓存中
        }
        grvCS.DataSource = tableData;
        grvCS.DataBind();

//DataSet mds = new DataSet();//验证数据绑定用,因为xml层次结构的问题导致了数据绑定失败;
        //mds.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml"));
        //grvCS.DataSource = mds;
        //grvCS.DataBind();
    }
}

其中
1.记得在view页面为gridview绑定相应的数据字段。
2.注意xml的格式,作者本人在实验的时候就应Xml数据格式的问题导致读取的数据绑定失败。

(0)

相关推荐

  • asp.net 通用的连接数据库实例代码

    View Code 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <center><h2><font face="宋体">访问数据库的通用代码实例</font></h2>

  • asp.net开发中怎样去突破文件依赖缓存

    在Web项目中可以使用Session,Application等来缓存数据,也可以使用Cache来缓存. 今天我们特别关注的是Cache缓存.Cache位于命名空间System.Web.Caching命名空间下,看到这里我们想到的是它在Web项目中使用. 说明:Cache 类不能在 ASP.NET 应用程序外使用.它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的.在其他类型的应用程序(如控制台应用程序或 Windows 窗体应用程序)中,ASP.NET 缓存可能无法正常工

  • mysql实现本地keyvalue数据库缓存示例

    Key-Value缓存有很多,用的较多的是memcache.redis,他们都是以独立服务的形式运行,在工作中有时需要嵌入一个本地的key-value缓存,当然已经有LevelDb等,但感觉还是太重量级了. 本文实现了一种超级轻量的缓存, 1.实现代码仅仅需要400行: 2.性能高效,value长度在1K时测试速度在每秒200万左右 3.缓存是映射到文件中的,所以没有malloc.free的开销,以及带来的内存泄露.内存碎片等: 4.如果服务挂掉了,重启后缓存内容继续存在: 5.如果把缓存映射到

  • SQL Server 高速缓存依赖分析

    一,使数据库支持SQL高速缓存依赖性. 二,使表支持SQL高速缓存依赖性. 三,在ASP.NET应用程序的web.config文件中包含SQL连接字符串. 四,以如下方式利用SQL高速缓存依赖性:      1)在代码中编程创建一个SqlCacheDependency对象.      2)给OutputCache指令添加SqlCacheDependency属性.      3)通过Response.AddCacheDependency给Response对象添加一SqlCacheDependenc

  • 开启SQLSERVER数据库缓存依赖优化网站性能

    很多时候,我们服务器的性能瓶颈会是在查询数据库的时候,所以对数据库的缓存非常重要,那么有没有一种方法,可以实现SQL SERVER数据库的缓存,当数据表没有更新时,就从缓存中读取,当有更新的时候,才从数据表中读取呢,答案是肯定的,这样的话我们对一些常用的基础数据表就可以缓存起来,比如做新闻系统的新闻类别等,每次就不需要从数据库中读取了,加快网站的访问速度. 那么如何开启SQLSERVER数据库缓存依赖,方法如下: 第一步:修改Web.Config的<system.web>节的配置,代码如下,让

  • 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

    对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层,数据访问不可能吃得消,对于一般网站,只要具备独立的服务器,完全可以通过配置Memcache提高网站访问速度和减少数据库压力,这里主要讨论一下Memcache和MySQL数据库交互过程的流程关系,了解Memcache的中间缓存层作用,从而深入了解Memcache机制原理. Memcache和MySQL交互流程图 如上图,传统的查询方法是直接查询数据库,数据库将结果返回给查询语句,而当有Memcache中间缓存层

  • asp.net 备份和恢复数据库的方法示例

    复制代码 代码如下: /********************************************************************************** * * 功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO.dll组件 * 当使用Access中,请浏览添加引用以下两个dll *          引用C:\P

  • asp.net连接数据库读取数据示例分享

    webconfig配置: 复制代码 代码如下: <connectionStrings>  <add name="MSSQL" connectionString="Data Source=localhost;Initial Catalog=test;User ID=sa;password=sa;" providerName="System.Data.SqlClient"/></connectionStrings>

  • ASP.NET数据库缓存依赖实例分析

    本文实例讲述了ASP.NET数据库缓存依赖,分享给大家供大家参考.具体如下: 一般在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cache.Insert 并提供引用文件的 CacheDependency 对象添加的 复制代码 代码如下: Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.x

  • 深入分析缓存依赖中cachedependency对象及周边小讲

    最近正在学缓存依赖,现把一些学习资料整理如下:缓存依赖主要提供以下功能:1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存.2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项.3.可以在网络园(一台服务器上存在多个处理器)或网络场(多台服务器运行同一应用程序)中使用 SQL 缓存依赖项.4.与 SQL 缓存依赖项关联的数据库操作比较简单,因此不会给服务器带来很高的处理成本. 现在把与缓存依赖相关的对象集合如下,并对差异性进行了一定程度的分析--缓存依赖主要由3个核心类

  • 详解Java在redis中进行对象的缓存

    Java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去. 一.首先,在存储的对象上实现序列化的接口 package com.cy.example.entity.system; import java.util.List; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; im

  • ASP.NET中HttpContext对象下的属性介绍

    一.HttpContext概述: HttpContext封装关于单个HTTP请求的所有HTTP特定信息. HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务. HttpContext类它对Request.Respose.Server等等都进行了封装,并保证在整个请求周期内都可以随时随地的调用:为继承 IHttpModule 和 I

  • ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效

    因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Settings GetSettings() { if (HttpRuntime.Cache["settings"] != null) return (Class.Settings)HttpRuntime.Cache["settings"]; string rootPath

  • django小技巧之html模板中调用对象属性或对象的方法

    环境:依赖最初test2数据库 python3版本            多python版本环境 进入,python3虚拟环境,新建项目test4: ]# cd py3/django-test1/ ]# django-admin startproject test4 创建应用bookshop: ]# cd test4 ]# python manage.py startapp bookshop 修改settings.py主配置文件: ]# vim test4/settings.py ... #数据

  • Java中的对象、类、抽象类、接口、继承之间的联系

    正文: 举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成. 在动物中又分为两类:哺乳动物.卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示. 而哺乳动物可以继续划分为人.狗.猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示. 如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式. 然后每个学生或者每个工人都是具体的,那么就通过对象来表示: 由下

  • C++中的对象初始化操作代码

    当对象在创建时获得了一个特定的值,我们说这个对象被初始化.初始化不是赋值,初始化的含义是创建变量赋予其一个初始值,而赋值的含义是把当前值擦除,而以一个新值来替代.对象初始化可以分为默认初始化.直接初始化.拷贝初始化以及值初始化. // new edit on 2020.7.23 #pragma once #include <iostream> using namespace std; class ClassTest { public: //定义默认构造函数 ClassTest() { c[0]

  • SQL server中提示对象名无效的解决方法

    产生SQL对象名无效的问题大多原因是由于数据迁移导致的,下面我们给出解决方法. 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法. 一.孤立用户的问题 比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于

随机推荐