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

本文实例讲述了ASP.NET数据库缓存依赖,分享给大家供大家参考。具体如下:

一般在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为。以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cache.Insert 并提供引用文件的 CacheDependency 对象添加的

代码如下:

Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));

但是当我们想让缓存根据数据库中表的变化而失效并重建该缓存的时候,应该怎么做呢 – 这种情景在很多应用程序中都存在。Asp.net没有为监视数据库表的变化提供内在的直接缓存支持。利用SQL Server的不常用的系统存储过程sp_makewebtask ,是可以达到这个目的的,这个存储过程本来是用作从查询中生成web页面的,但是我们只要稍作修改- 在触发器中使用它,我们就可以取得一个合理有效的途径,当数据库某张表的记录被更新,删除或者修改时来修改某个特定的文件,这样会使在CacheDependency实例中的文件监视进程侦测到文件的变化,从而使缓存失效。事实上,因为CacheDependency 类工作在UNC文件协议上,我们可以在整个Web Farm上部署这个解决方案,Web Farm上每台机器上的应用程序副本都会通过UNC文件路径来监视WebFarm中某台单个机器上的同一个文件

废话少说,让我们创建一个简单的web应用程序,来演示它是如果工作的。首先,我们将会使用我们SQL Server中都信赖的Northwind范例数据库。创建一个简单的DataGrid来显示Employees表中的记录. 我们要做的第一件事情就是创建触发器。

代码如下:

CREATE TRIGGER WriteCacheDepFile ON [dbo].[Employees]
FOR INSERT, UPDATE, DELETE
AS
EXEC sp_makewebtask '\\peter\C$\Cache\mycache.txt', 'SELECT top 1 FirstName FROM employees'

以上存储过程就是简单的告诉SQL Server,如果Employee表发生任何变动,就根据一个简单的查询来更新”mycache.txt”文件,有这个简单的查询语句其实足够了,只要它是一个有效的T-SQL语句,SQL Server会很乐意的去更新那个文件。

接下来,我们需要创建一个目录,并设为共享。你可能要更新该文件的访问权限,以使它可以被写入,注意,我这里使用的是管理员共享”C$”.另外,你还需要创建一个空的文本文件,"mycache.txt".

好,现在可以创建我们的应用程序了。首先,在web.config文件中输入依赖文件名称,这样做可以使我们在修改依赖文件的时候不需要重新部署应用程序。

在web.config文件的根部,添加appSettings配置节:

代码如下:

</system.web>
<appSettings>
<!—缓存依赖文件路径 -->
<add key="dependencyFile" value="\\peter\Cache\mycache.txt" />
</appSettings>
</configuration>

现在,让我们在Global类中建立缓存机制,这样我们不需要在任何页面中编写特定的代码

代码如下:

public class Global : System.Web.HttpApplication
{
Cache _cache =null;
public static bool blnReflash = false;
public const string ConnStr = "server=localhost;database=Northwind;uid=sa;pwd=";
public const string strSQL = "SELECT EmployeeID, lastname, firstname FROM Employees";
protected void Application_Start(Object sender, EventArgs e)
{
_cache = Context.Cache;
RefreshCahe(null,null,0);
}
protected void Session_Start(Object sender, EventArgs e)
{
if(HttpContext.Current.Cache["Employees"]==null)
RefreshCache(null,null,0);
}
static void RefreshCache(string key,object item,CacheItemRemoveReason reason)
{
SqlDataAdapter adapter = new SqlDataAdapter(strSQL,ConnStr);
DataSet ds = new DataSet();
adapter.Fill(ds,"Employees");
CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RefreshCache);
}

希望本文所述对大家的asp.net程序设计有所帮助。

(0)

相关推荐

  • ASP.NET列出数据库活跃链接的方法

    本文实例讲述了ASP.NET列出数据库活跃链接的方法.分享给大家供大家参考.具体分析如下: 这里列出数据库的活跃链接.主要使用geeric列表和一个贮存器,创建一个泛型列表的链接,如果他们是活跃的,那么他们将显示在导航了. //First in C# where you create the controller action method //to create the method that will populate all content details //add the follow

  • C#和asp.net中链接数据库中参数的几种传递方法实例代码

    复制代码 代码如下: #region 参数传递方法第一种     //参数设置方法(第一种) //SqlParameter sp = new SqlParameter("@Name", str_Name); //SqlParameter sp2 = new SqlParameter("@Pwd", str_Pwd); //cmd.Parameters.Add(sp); //cmd.Parameters.Add(sp2); #endregion //简单的一般使用第一

  • asp.net得到本机数据库实例的两种方法代码

    复制代码 代码如下: <%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">  protected void

  • ASP.NET 链接 Access 数据库路径问题最终解决方案

    当做小项目用 ASP.NET + Access 数据库时,总是遇到数据库路径问题,本人以前的解决方法是每次访问数据库时,把链接字符串以参数的形式传到数据访问层,实施起来相当麻烦,这次找到了一个比较好的方案,这是本人目前的最终解决方案(如题)  ^_^ 解决方案为: 在 Web.Config 中配置 Access 数据库驱动和数据库文件名称. 请看代码 <appSettings>     <add key="DBDriver" value="Provider=

  • asp.net实现access数据库分页的方法

    asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法.希望对大家的asp.net程序设计能有所帮助. 具体实例代码如下: <divclass="page"id="ctrlRecordPage"> 总<asp:LabelID="Zpage"runat="server"Text="1"></asp:Label

  • ASP.NET oledb连接Access数据库的方法

    使用OleDBCommand相关操作类需要引入System.Data.OleDb命名空间. 通过连接一个带密码的access数据库 读取其中的数据并置入表格中显示,验证连接和命令使用正确性. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Da

  • ASP.NET连接sql2008数据库的实现代码

    利用SqlConnection对象连接sql2000以上版本,并使用SqlCommand对象对数据库进行读取. SqlCommand类概述: 用于对sql数据库执行sql语句或存储过程. 命名空间:System.Data.SqlClient 程序集: System.Data(在 System.Data.dll中) SqlCommand类的属性 1.CommandText 获取或设置要对数据源执行的Transact-SQL语句或存储过程. 2. CommandType 获取或设置一个值,该值指示如

  • ASP.NET连接MySql数据库的2个方法及示例

    方法一: 使用MySQL官方组件使用MySQL推出的 MySQL Connector/Net 组件, 该组件是MySQL为ADO.NET访问MySQL数据库设计的.NET专用访问组件.完成该组件后,需要在项目中引用这个组件,也可以直接在配置文件的< assemblies>节点内添加下面的节点: 复制代码 代码如下: <add assembly="MySql.Data, Version=5.1.5.0, Culture=neutral, PublicKeyToken=C5687F

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

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

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

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

  • Android 图片的三级缓存机制实例分析

    Android 图片的三级缓存机制实例分析 当我们获取图片的时候,如果不加以协调好图片的缓存,就会造成大流量,费流量应用,用户体验不好,影响后期发展.为此,我特地分享Android图片的三级缓存机制之从网络中获取图片,来优化应用,具体分三步进行: (1)从缓存中获取图片 (2)从本地的缓存目录中获取图片,并且获取到之后,放到缓存中 (3)从网络去下载图片,下载完成之后,保存到本地和放到缓存中 很好的协调这三层图片缓存就可以大幅度提升应用的性能和用户体验. 快速实现三级缓存的工具类ImageCac

  • ASP.NET数据库操作类实例

    本文实例讲述了ASP.NET数据库操作类.分享给大家供大家参考,具体如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Syst

  • PHP中常见的缓存技术实例分析

    本文实例分析了PHP中常见的缓存技术.分享给大家供大家参考.具体如下: JBLOG在开发的过程中,对性能的优化做了不少工作.为了尽量减少不必要的数据库查询,我对一些数据进行了缓存和静态化处理. 缓存的原理:把一些经常要用到但又很少改动的数据以数组或其它形式存储到一个独立的PHP文件中,然后在需要用到的时候包含进来. 缓存的优点:能够大大减少数据库的查询次数,减轻数据库的压力,提高程序的执行效率. JBLOG缓存的数据有:系统设置.博客分类.侧栏最新日志.最新评论.博客统计.日志归档.友情链接.标

  • ASP 中 Split 函数的实例分析

    asp下使用split实现数组操作的方法ASP 中 Split 函数的实例 大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂--如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解. 我先介绍一下Split函数的用法: 返回值数组 = Split("字符串","分割符") 假设变量strURL保存着URL值,如strURL = "ftp://username:password@server&qu

  • ASP.NET中ServerPush用法实例分析

    本文实例讲述了ASP.NET中ServerPush用法.分享给大家供大家参考.具体分析如下: 什么是ServerPush,服务器向客户端"推送",其实就是"长连接" 只有浏览器请求服务器端,服务器端才给浏览器响应数据,不会主动向浏览器推送数据,这是一种安全考虑,也是提高服务器的性能考虑,如果服务器向浏览器主动推送数据,就要用到ServerPush等技术模拟实现. 举个例子: 通过两个页面互相发送消息实现,消息放到数据库. /// <summary> //

  • Android编程之数据库Sql编程实例分析

    本文实例讲述了Android编程之数据库Sql编程实现方法.分享给大家供大家参考.具体分析如下: Android中安装轻量级数据库Sqlite,现在测试数据库基本操作. 数据库基本操作:创建表,插入,删除可以用execSQL();读取可以用rawQuery();这两个函数都可以标准SQL语句进行操作. 源代码: package com.test.sql; import android.app.Activity; import android.content.Context; import and

  • mysql数据库常见基本操作实例分析【创建、查看、修改及删除数据库】

    本文实例讲述了mysql数据库常见基本操作.分享给大家供大家参考,具体如下: 本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中"关键字"变成大写;以及因为整理"mysql学习之路",移除字符集和校对集问题并归成一个新博文. 创建数据库  : 语法  : CREATE DATABASE 数据库名字[库选项]; 库选项说明  : 库选项是可选项,可以不写 ,如

  • pymssql数据库操作MSSQL2005实例分析

    本文实例讲述了pymssql数据库操作MSSQL2005的方法.分享给大家供大家参考.具体如下: 使用的MSSQL2005,通过pymssql来连接的.把可能用到的数据库操作方式都总结如下,如果要用的时候就备查啦. #!/usr/bin/env python #coding=utf-8 from __future__ import with_statement from contextlib import closing import inspect import pymssql import

随机推荐