ASP.NET 2.0数据缓存功能简介

原创 2006年07月26日 15:35:00
在ASP.NET 2.0,新增加了不少新的功能和控件。其中,在数据的缓存功能,比asp.net 1.1有了很大的改变。众所周知,数据的缓存功能是十分重要的,我们可以把一些在相对一段时间内不发生改变的数据放在缓存中,这样,就不必要每次去读取数据库,当下次再需要这些数据时,可以直接从缓存中取得,大大增强了效率。

而在asp.net 1.1 中,已经比较好地实现了数据的缓存功能,但有一个小问题,那就是如果数据库中的数据发生了变化,缓存不能在指定的时间内更新,而必须等到缓存失效。比如,在网页中,如果你对商品的一些详细信息,如价格等使用了页面缓存,那么假如在后台修改了这些信息,用户不会马上看到这些信息,而要延迟一些时间才看到。在某些应用场合,如果你要做到对于数据库的任何更新,都能马上可以在缓存的变化生效的话,在asp.net 1.1中则是比较难实现的,而在asp.net 2.0中,则可以很方便地实现该功能。本文将以.net Framework 2.0 beta,visual web developer express beta ,来介绍该功能的实现。

  首先,在asp.net 2.0中,针对sql server 7/2000,以及即将发行的sql server 2005(Yukon),分别提供了新的缓存功能。这里着重介绍针对sql server 7/2000的缓存功能。这个新的数据缓存功能,叫做SqlCacheDependency,要实现该功能,需要采用如下步骤: 

  1、在.net framework 2.0的安装目录下
(默认是WINNT/Microsoft.NET/Framework/v2.0.40607),启动一个叫aspnet_regsql.exe的命令行工具,比如:

aspnet_regsql -S localhost ?U sa ?P 123456 -d Pubs ?ed

  上面的意思是,指定了本地的数据库服务器localhost,并指定了登陆的用户名和密码,并用参数-d指定了要采用哪一个数据库(这里是指定了pubs)数据库,-ed参数表示是允许该数据库使用sqlcachedependency功能。

  接着,我们需要指定对哪一个表使用数据sqlcachedependency功能,如:

aspnet_regsql -S localhost ?U sa -P 123456 -ed -d pubs -et -t authors

  上面语句的意思是,指定对pubs数据库中的authors表使用sqlcachedependency功能,-t参数后是表的名称,-et是允许该表使用sqlcachedependency功能。其他的有关参数简单介绍如下:

参数 参数意义 
-?  显示该工具的帮助功能. 
-S  后接的参数为数据库服务器的名称或者IP地址 
-U  后接的参数为数据库的登陆用户名. 
-P  后接的参数为数据库的登陆密码 
-E  当使用windows集成验证时,使用该功能 
-t  后接参数为对哪一个表采用sqlcachedependency功能。 
-d  后接参数为对哪一个数据库采用sqlcachedependency功能 
-ed  允许对数据库使用sqlcachedependency功能 
-dd  禁止对数据库采用sqlcachedependency功能 
-et  允许对数据表采用sqlcachedependency功能 
-dt  禁止对数据表采用sqlcachedependency功能 
-lt  列出当前数据库中有哪些表已经采用sqlcachedependency功能 

  Sqlcachedependency的的原理简单来说,是采用aspnet_regsql这个专门工具,预先设定要监视的数据库和表,并在数据库中增加一个专门的表,打开数据库,会发现多了一个数据表aspnet_sqlcachetablesforchangenotification,如下图:

 

  这个表有三个字段,“tableName”记录要追踪的数据表的名称,“notificationCreated”记录开始追踪的时间,“changeId”是一个int类型的字段,每当追踪的数据表的数据发生变化时,这个字段的值就加1。 此外还会在指定的数据库中增加几个存储过程,用来让ASP.NET引擎查询追踪的数据表的情况,并给要使用 Sqlcachedependency 的表加上若干触发器,分别对应到Insert、Update、Delete操作。ASP.NET引擎通过执行它加上的存储过程“AspNet_SqlCachePollingStoredProcedure”,这个存储过程直接返回“AspNet_SqlCacheTablesForChangeNotification”表的内容,让ASP.NET引擎知道哪个表的数据发生的变化。
接下来,我们用visual web developer 2005 beta,来创建一个website,往其中增加一个label标签,以显示当前执行的时间。并往其中增加一个gridview控件,用来显示来自pubs数据库的表authors,代码如下:

<%@ Page Language="VB" AutoEventWireup="false" CompileWith="Default.aspx.vb" ClassName="Default_aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
 <asp:Label ID="Label1" Runat="server" Text="Label" Width="74px" Height="19px"></asp:Label> 
<br />
<asp:GridView ID="GridView1" Runat="server" DataSourceID="SqlDataSource1">
</asp:GridView>
<br />
<br />
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT * FROM authors"
ConnectionString="Initial Catalog=pubs;Data Source=localhost;user id=sa;password=123456">
</asp:SqlDataSource>
</form>
</body>
</html> 

  在default.aspx.vb的代码的page_load事件中,加入以下代码

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = CType(System.DateTime.Now(), String)
End Sub 

  接下来,我们开始配置web.config文件。我们采用的配置文件如下:

<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="PubsConn" connectionString="Initial Catalog=pubs;Data Source=(local);user id=sa;password=123456"/>
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="500">
<databases>
<add name="Pubs" connectionStringName="PubsConn"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration> 

  其中,要注意的是polltime参数,polltime参数是毫秒,最小值为500,该参数的意义时设置系统多长时间去检查一次cache中的数据是否需要更新。而<database>标签内必须注明需要用到的数据库连接字符串,必须和之前<connectionStrings>中定义的名称相符合(如本例中,connectionstring的名称是pubsconn。

  最后,我们在程序的首部,加入页面缓存的定义语句如下:

<%@ outputcache duration="60" varybyparam="none" sqldependency="Pubs:authors" %>

  上面的语句,则定义了页面输出缓存为1分钟,并且使用sqldependency,sqldependency的属性中,以“名称:表名”的形式定义,其中的名称,就是刚才我们在web.config中定义的<databases>中的名称,这里是pubs。“Pubs:authors”中的authors,则是要使用sqldependency的表名authors表。在这里要注意的是,虽然我们是用vb.net,但sqldependency属性中的参数注定是大小写敏感的,如“Pubs:authors”中的表名authors必须和用Aspnet_regsql在命令行下定义的表名authors一样。

  运行我们的程序,先不修改数据库中的数据。如下图:
  我们不断刷新该应用,会发现由于使用了缓存功能,上面的时间是不变的。现在我们打开sql server,修改其中的au_id为172-32-1176的作者名white,将其改为RED,之后再刷新程序,看到了么?由于使用了sqldependency的功能,马上缓存中反映出新修改的数据了:
  本文简单介绍了在asp.net 2.0中新增加的sqldependency功能,该功能还有很多其他的应用,具体的可以参阅msdn相关资料。
 

ASP.NET 2.0数据缓存功能简介

在ASP.NET 2.0,新增加了不少新的功能和控件。其中,在数据的缓存功能,比asp.net 1.1有了很大的改变。众所周知,数据的缓存功能是十分重要的,我们可以把一些在相对一段时间内不发生改变的数...
  • frankfif
  • frankfif
  • 2006-12-21 16:00:00
  • 293

ASP.NET 2.0数据缓存功能简介 (转贴)

 在ASP.NET 2.0,新增加了不少新的功能和控件。其中,在数据的缓存功能,比asp.net 1.1有了很大的改变。众所周知,数据的缓存功能是十分重要的,我们可以把一些在相对一段时间内不发生改变的...
  • weisen8
  • weisen8
  • 2004-09-21 09:32:00
  • 637

ASP.NET 2.0数据缓存功能简介(原作)

我最近研究ASP。NET 2。0的一点心得,发表在天极网上的http://www.yesky.com/SoftChannel/72342380468043776/20040805/1838817.sh...
  • mdot
  • mdot
  • 2004-08-05 20:30:00
  • 1188

ASP.NET 2.0数据缓存功能简介[转自天极网]

在ASP.NET 2.0,新增加了不少新的功能和控件。其中,在数据的缓存功能,比asp.net1.1有了很大的改变。众所周知,数据的缓存功能是十分重要的,我们可以把一些在相对一段时间内不发生改变的数据...
  • firefly_liu
  • firefly_liu
  • 2008-11-07 10:50:00
  • 283

ASP.NET 2.0数据缓存

  • 2013年11月13日 01:16
  • 305KB
  • 下载

ASP.NET 2.0数据缓存功能小例

 ASP.NET 2.0数据缓存功能小例2007-09-23 14:02出处:http://hi.baidu.com/luchaoshuai/blog/item/b4a897542f2abf5bd10...
  • laolaowhn
  • laolaowhn
  • 2007-09-25 13:40:00
  • 649

安装ASP.NET AJAX

 安装ASP.NET AJAX简介本主题描述如何安装ASP.NET AJAX Beta测试版本并且可选择安装ASP.NET AJAX社区技术预览(CTP)发布版本,还有ASP.NET AJAX控件工具...
  • Jonly
  • Jonly
  • 2007-08-20 10:41:00
  • 3072

Retrofit2.0+Okhttp不依赖服务端的数据缓存

随着Retrofit在项目中的使用,替换的以前使用的网络框架,相关的缓存机制也要进行替换,网络上大部分的Retrofit+okhttp缓存资料都是进行针对所有url的而且需要服务端的配合。有些时候是先...
  • stven_king
  • stven_king
  • 2016-09-18 19:45:23
  • 1698

ASP.NET 缓存技术分析

缓存功能是大型网站设计一个很重要的部分。由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能。可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大...
  • sundacheng1989
  • sundacheng1989
  • 2013-08-16 14:27:12
  • 12004
收藏助手
不良信息举报
您举报文章:ASP.NET 2.0数据缓存功能简介
举报原因:
原因补充:

(最多只允许输入30个字)