Sampson-Li
Sampson.Li学习经验总结博客 学历代表过去,能力代表现在.学习力代表未来!
SQL 缓存依赖

作用:

使用SQL 缓存依赖技术,可以实现当应用程序中对应的数据库中的数据发生改变时

才清除应用程序中对应的缓存,最大化的提高程序的性能。

实现方法:



一、创建数据库

a) 数据库不能为动态附加的模式

b) 启用数据库中的消息传送功能

alter database CacheDependencyTest set enable_broker

“CacheDependencyTest”为自己建的数据库

二、在应用程序中合使用SQL 缓存依赖技术

a) 建立一个Global.asax文件,在其中的“Application_Start”方法添加下面代码:

//当程序运行时启动sql缓存依赖监听

string connString = ConfigurationManager.ConnectionStrings["CacheDependencyTestConnectionString"].ConnectionString;

SqlDependency.Start(connString);





b) 在要使用缓存的页面中使用缓存依赖



protected void Page_Load(object sender, EventArgs e)

{

//select 语句必须包含确切的列名,表名也要加上所属用户名,

//例如下面dbo.CacheTable表的dbo就不能略去

string sql = "SELECT UserName FROM dbo.CacheTable";



string connstring=ConfigurationManager

.ConnectionStrings["CacheDependencyTestConnectionString"]

.ConnectionString;

SqlConnection conn=new SqlConnection(connstring);

SqlDataAdapter da = new SqlDataAdapter(sql, conn);

DataTable dt = new DataTable();

// 创建一个SQL缓存依赖,要用一个selectCommand做为参数

System.Web.Caching.SqlCacheDependency denpendency

= new System.Web.Caching.SqlCacheDependency(da.SelectCommand);



//将数据库中的数据填到dt中,要创建完缓存依赖后才可以填数据

da.Fill(dt);



//如果缓存中没有dt这个表,就将表dt添加缓存中

if (Cache["CacheTable"] == null) {

Cache.Insert(

"CacheTable"//缓存名

, dt//要缓存的对象,这里是一个DataTable

, denpendency//sql缓存依赖对象

//缓存过期时间,这里设置为永不过期.

//所以会一直到数据库中的表数据发生更改时才会清除缓存

,System.Web.Caching.Cache.NoAbsoluteExpiration

//滑动时间,这里设置为0;

//如果设置为5,代表如果你5秒钟内没有发请求,就从缓存中清除

, TimeSpan.Zero

);

//测试用的,这样在界面才知道数据是不是从缓存读取

this.lblFlag.Text = "out of cache"+DateTime.Now.ToString();

}

else

{

this.lblFlag.Text = "use cache" + DateTime.Now.ToString();

}

//重缓存中读取数据

this.GridView1.DataSource = Cache["CacheTable"] as DataTable;

this.GridView1.DataBind();

}







c) 页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AppCache.aspx.cs" Inherits="cacheTest.AppCache" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblFlag" runat="server"></asp:Label>

<asp:GridView ID="GridView1" runat="server">

</asp:GridView>



</div>

</form>

</body>

</html>

 

posted on 2012-03-19 09:09  Sampson  阅读(303)  评论(0编辑  收藏  举报