C#缓存之SqlCacheDependency用法实例总结

本文整理汇总了C#缓存的数据库依赖类SqlCacheDependency的使用方法,具体内容如下:

1、数据库依赖类SqlCacheDependency

数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题。

语法定义:

SqlCacheDependency类主要的构造函数如下:

public SqlCacheDependency(string database,string table)

其中参数一代表要启用缓存的数据库,参数二表示缓存的表。在实际使用过程中,只需要指明缓存的数据库和表即可。

方法是属性的应用(代码与CacheDependency类似),不过Sql需要先进行一下对web.config进行配置和设置数据库的缓存配置一下才可以使用SqlCacheDependency缓存类

首先web.config配置如下:

<!--连接数据库语句-->

<configuration>
 <connectionStrings>
  <add name="Config" connectionString="Data Source=.;Initial Catalog=CacheData;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
 </connectionStrings>

<!--在system.web节点下添加-->
<!--注意事项:配置中add name值为数据库名,connectionStringName为连接数据库字段的名称要相同-->

<caching>
<sqlCacheDependency enabled="true" pollTime="1000">

<databases>
 <add name="CacheData" connectionStringName="Config" pollTime="1000"/>
</databases>
</sqlCacheDependency>

</caching>

2、Vs缓存配置:

 打开“开始”|“所有程序”|“Microsoft Visual Studio 2010”|“Visual Studio Tools”|“Visual Studio 2010命名提示”菜单命令。

在命令框内输入:aspnet_regsql.exe -S  SqlServer服务器  -U <Username> -P <Password> -ed -d 数据库名称 -et -t 表名

若无身份验证输入:aspnet_regsql.exe -S  SqlServer服务器  -ed -d 数据库名称 -et -t 表名

执行命令即可;

3、页面代码;

private static SqlCacheDependency MyDep;
    protected void Page_Load(object sender, EventArgs e)
    {
      Label1.Text = DateTime.Now.ToString();
      if (!IsPostBack)
      {
        //Cache为数据库名,T_SqlCache为缓存表

        DataSet ds = GetSet();
        if (Cache["SqlCon"] == null)
        {
          //添加缓存SqlCon,缓存值为数据库表内容,
          MyDep = new SqlCacheDependency("Cache", "T_SqlCache");
          Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
        } 

      }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
      if (MyDep.HasChanged)
      {//当数据库值更改时提醒;
        Response.Write("数据库修改时间为:"+MyDep.UtcLastModified);
      }
      if (Cache["SqlCon"] == null)
      {//当缓存过期或数据库值修改后缓存从新加载
        MyDep = new SqlCacheDependency("Ajax", "T_AjaxLD");
        DataSet ds = GetSet();
        Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
      }
      this.GridView1.DataSource = Cache["SqlCon"];//绑定数据
      this.GridView1.DataBind();
    }
    /// <summary>
    /// 生成Dataset
    /// </summary>
    /// <returns></returns>
    private DataSet GetSet()
    {
      DataSet ds = new DataSet();
      string sql = "select * from T_SqlCache";
      string Config = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;//连接数据库语句
      using (SqlConnection cnn = new SqlConnection(Config))
      {
        using (SqlCommand cmm = new SqlCommand(sql, cnn))
        {
          SqlDataAdapter dapter = new SqlDataAdapter(cmm);
          dapter.Fill(ds);
        }
      }

      return ds;
    }

C#缓存基本内容就差不多这些,一些应用需要在实践中总结出来,此处顺便分析一下session和Cache的区别:

Session和Cache的区别:

以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session则保存对话信息。Application则是保存在整个应用程序范围内的信息,相当于全局变量。通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?

本节结合使用经验,详细介绍Session缓存和Cache缓存的区别如下:

(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。

(2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。

(3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。

(4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。

(5)VS2005的测试版提供了将缓存保存在硬盘上的参数,但正式版中取消了这个功能,估计其在以后版本中会重新实现。而Session目前只能保存在内存中,对其性能有影响。

此外,需要特别注意:为了提高Cache的有效利用率,建议对于不经常改动的数据使用Cache。

时间: 2014-08-09

ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码

1.在系统登陆成功时记录登陆的用户名.密码等信息(登陆功能的部分代码) 复制代码 代码如下: Session["id"] = user.id.ToString(); Session["name"] = user.name.ToString(); Session["pwd"] = user.password.ToString(); Session["time"] = user.LoginTime.ToString(); Sess

在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency

导言: 在56和57章探讨的缓存技术使用的是基于时间的缓存周期,当过了某段时间后便将缓存数据从内存清除.当设置缓存时间为x秒时,数据在x秒内都是"新"的.当然,就像在60章谈到的那样,对静态数据来说,x可延伸到web应用程序的整个生命周期(lifetime). 当缓存数据时,基于时间周期的技术因为其易用性而常常被采用,不过又常常不那么完美.理想的状态是这样的:数据库数据还是应缓存在内存,直到源数据(underlying data)发生改变时才从内存清除.这样的话可以最大化的获取缓存带来

asp.net中SqlCacheDependency缓存技术概述

本文实例讲述了asp.net中SqlCacheDependency缓存技术,对于大型web程序设计来说具有很高的实用价值.具体如下: 对于访问量大,但更新较少的网站中使用缓存技术,可以大大提高运行效率:加上.NET 2.0提供的缓存依赖机制,我们可以很方便的对缓存进行管理更新:以下是本人学习的一点心得体会,希望能够起到抛砖引玉的作用. 建立缓存依赖,实现代码如下: /**//// <summary> /// 建立缓存依赖项 /// </summary> /// <return

asp.net页面SqlCacheDependency缓存实例

缓存技术是asp.net程序设计中非常实用的技术,也是大型web程序设计中比较常见的技术.本文就以实例形式对此加以说明.具体如下: asp.net页面的SqlCacheDependency Sql缓存: Cahce/SqlCachePage.aspx页面代码如下: <%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile=&qu

ASP.net Substitution 页面缓存而部分不缓存的实现方法

文件1:Deafault.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ outputcache duration="10" varybyparam="none" %> <!-

Asp.Net Cache缓存使用代码

复制代码 代码如下: public DataSet createCache() { //返回DataSet DataSet ds=new DataSet(); OleDbConnection conn=new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("data.mdb")); conn.Open(); string sql="select

asp.net(C#)遍历memcached缓存对象

STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. 1.stats items 显示各个slab中item的数目. 2.stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表,显示格式:ITEM key_name [ value_length b; expire_time|access_time s] 除了

ASP.NET性能优化之让浏览器缓存动态网页的方法

OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定的场景下最大化地提升ASP.NET站点的性能.如果说OutputCache是从广度上提升并发效率,则浏览器缓存是从深度上提升效率. 一:HTTP头简介 1.1浏览器第一次请求 假设我们请求一个URL地址,譬如我服务器上的一个静态页面http://192.168.0.77/luminji2/

ASP.NET缓存管理的几种方法

尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战.因为HTTP是一个无状态的协议并且web服务无法识别不同请求的用户.识别不同的请求究竟是哪个特定用户发出的,并且存储这些信息以便它在以后请求中能被重新使用,对我们来说非常重要.ASP.NET提供了很多特性用来在客户端和服务器端存储这些数据,但是有时我们会对"我们什么时候使用它们(哪个)"感到疑惑.在ASP.NET中,我们会遇到像Session,Application以及Cache这些对象,为了有效地在

asp.net 客户端浏览器缓存的Http头介绍

让浏览器做缓存需要给浏览器发送指定的Http头,告诉浏览器缓存多长时间,或者坚决不要缓存.作为.net的程序员,其实我们一直都在用这种方法,在OutputCache指令中指定缓存的Location为Client时,其实就是给浏览器发送了一个Http头,告诉浏览器这个Url要缓存多长时间,最后修改的时间. 微软在OutputCacheModule中对这些缓存用到的Http头给我们进行了很好的封装,但是了解这些Http头可以更灵活的使用它们. 和客户端缓存相关的Http头有以下几个,分别是: 1.

ASP.NET MVC中使用jQuery时的浏览器缓存问题详解

介绍 尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议. 首先要做的事情是在服务器端支持HTTP GET,定义不同的URL输出不同的数据(MVC里对应的就是action).如果要使用同一个地址获取不同的数据,那就不对了,一个HTTP POST也不行因为POST不能被缓存.许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵). 缓存解释 jQuery全局对象里的ajax

asp.net 获取客户端浏览器访问的IP地址的实例代码

本文介绍了asp.net 获取客户端浏览器访问的IP地址的实例代码,分享给大家,自己也留个笔记 1.js方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Document</title> <script src="http://pv.sohu.com/cityjson?ie=utf-8"></scr

Asp.Net中MVC缓存详解

本文通过介绍了Asp.Net中MVC缓存的种类,以及他们之间的区别等内容,让学习者能够深入的了解MVC缓存的原理机制,以下是具体内容: 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术.当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝. Web应用缓存技术大体上可以分为两类:服务端缓存和客户端缓存.两种目标都是减少重复性内容的生成和网络传输工作,因为缓存数据存储的位置不同,而分为服务端缓存和客户端缓存. 服务端缓存 服务端缓存技术关注于服务端数据查询,生成或者操作

JS清除IE浏览器缓存的方法

js中自动清除ie缓存方法 - 常用 对于动态文件,比如 index.asp?id=... 或者 index.aspx?id=... 相信有经验的程序员都知道怎样禁止浏览器缓存数据了. 但是对于静态文件(css,jpg,gif等等), 在什么场合下面我们需要禁止浏览器缓存他们,怎么做? 方法一:Dojo中我们可以用简单的方法完成:在dojo.xhrGet(包括post)等方法中都包含preventCache属性,此属性的含义: "默认为启用浏览器缓存,否则将通过自动增加不同的参数来确保浏览器缓存

JSP页面缓存cache技术--浏览器缓存介绍及实现方法

一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernate,还分1级和2级缓存) 业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存). 表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机制).越上层的缓存效果越好,越

深入PHP与浏览器缓存的分析

我们往往在服务器上对缓存设置进行各种优化方案,但是我们却很少注意到客户端缓存,准确的说是浏览器的缓存机制.其实每种浏览器都有缓存策略,会暂时将每一个浏览过的文件缓存在一个特殊的文件夹里.我们就可以在用户重复提交页面请求的时候,告诉用户这个页 面没有改变,可以调用缓存. 那我们怎么知道用户有没有这个页面的缓存数据呢? 其实浏览器在发送请求的时候会先发送http头,一般象这样:Date: Sun, 30 Jul 2006 09:18:11 GMTContent-Type: image/gifLast

JavaWeb禁止浏览器缓存当前Web页面的方法

所谓浏览器缓存,是指当第一次访问网页时,浏览器会将这些网页缓存到本地,当下一次再访问这些被缓存的网页时,浏览器就会直接从本地读取这些网页的内容,而无需再从网络上获取. 虽然浏览器提供的缓存功能可以有效地提高网页的装载速度,但对于某些需要实时更新的网页,这种缓存机制就会影响网页的正常显示.幸好在HTTP响应消息头中提供了三个字段可以关闭客户端浏览器的缓存功能.下面三条语句分别使用这三个字段来关闭浏览器的缓存: response.setDateHeader("Expires", 0); r