欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net中SqlCacheDependency缓存技术概述

程序员文章站 2024-02-21 18:34:04
本文实例讲述了asp.net中sqlcachedependency缓存技术,对于大型web程序设计来说具有很高的实用价值。具体如下: 对于访问量大,但更新较少的网站中使用...

本文实例讲述了asp.net中sqlcachedependency缓存技术,对于大型web程序设计来说具有很高的实用价值。具体如下:

对于访问量大,但更新较少的网站中使用缓存技术,可以大大提高运行效率;加上.net 2.0提供的缓存依赖机制,我们可以很方便的对缓存进行管理更新;以下是本人学习的一点心得体会,希望能够起到抛砖引玉的作用。

建立缓存依赖,实现代码如下:

/**//// <summary> 
/// 建立缓存依赖项 
/// </summary> 
/// <returns></returns> 
private aggregatecachedependency tabledependency() 
{ 
aggregatecachedependency dependency = new aggregatecachedependency(); 
dependency.add(new sqlcachedependency("mspetshop4", "表名称")); 

return dependency; 
} 

一个非常简单的方法,首先我们先看看两个.net 2.0新增的两个类:

aggregatecachedependency在system.web.caching命名空间中,aggregatecachedependency主要作用是用于组合 asp.net 应用程序的 cache 对象中存储的项和 cachedependency 对象的数组之间的多个依赖项。

sqlcachedependency也存在于system.web.caching命名空间中,这个类用于建立asp.net应用程序的cache对象中存储的项和特定sql server数据库表之间的联系。

sqlcachedependency是如何建立cache对象中存储的项和特定sql server数据库表之间的联系的呢?看一下web.config配置文件就一目了然了。

<?xml version="1.0"?> 
<configuration xmlns="http://schemas.microsoft.com/.netconfiguration/v2.0"> 
<connectionstrings> 
<add name="localconnstring" connectionstring="server=(local);uid=sa;pwd=123456;database=mspetshop4"/> 
</connectionstrings> 
<system.web> 
<caching> 
<sqlcachedependency enabled="true" polltime="10000"> 
<databases> 
<add name="mspetshop4" connectionstringname="localconnstring" polltime="10000"/> 
</databases> 
</sqlcachedependency> 
</caching> 
<compilation debug="true"/> 
</system.web> 
</configuration> 

配置节<databases><add name="mspetshop4" connectionstringname="localconnstring" polltime="10000"/></databases>中配置了数据库信息,sqlcachedependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。(注意)name="mspetshop4"必须和new sqlcachedependency("mspetshop4", "表名称")中的数据库名称相一致。更多的配置信息可以查看(msdn帮助文档)。

使数据库支持sqlcachedependency特性:

要使得7.0或者2000版本的sql server支持sqlcachedependency特性,需要对数据库服务器执行相关的配置步骤。有两种方法配置sql server:

使用aspnet_regsql命令行工具,或者使用sqlcachedependencyadmin类。

aspnet_regsql工具位于windows\microsoft.net\framework\[版本]文件夹中,如果要配置sqlcachedependency,则需要以命令行的方式执行。

以下是该工具的命令参数说明:

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

比如在petshop4.0的数据库中使用sqlcachedependency特性:aspnet_regsql -s localhost -e -d mspetshop4 -ed 
以上面的命令为例,说明将对名为mspetshop4的数据库采用sqlcachedependency功能,且sql server采用了windows集成验证方式。我们还可以对相关的数据表执行aspnet_regsql命令,如:

aspnet_regsql -s localhost -e -d mspetshop4 -t item -et 
aspnet_regsql -s localhost -e -d mspetshop4 -t product -et 
aspnet_regsql -s localhost -e -d mspetshop4 -t category -et

最后为使用缓存:

protected void page_load(object sender, eventargs e) 
{ 
if (!ispostback) 
{ 
string key = "tablecache"; //缓存名称 
dataset data = (dataset)httpruntime.cache[key]; //获取缓存 

// 判断缓存数据为空 
if (data == null) 
{ 
// 获取数据 
data = getdatasource(); 

// 创建缓存依赖 
aggregatecachedependency cd = tabledependency(); 

// 创建缓存 
httpruntime.cache.add(key, data, cd, datetime.now.addhours(1), cache.noslidingexpiration, 

cacheitempriority.high, null); 
} 

gridview1.datasource = data; //绑定数据 
gridview1.databind(); 
} 
} 

获取数据源的方法,结合实际使用做修改。

private dataset getdatasource() 
{ 
string connectionstringlocal = configurationmanager.connectionstrings["localconnstring"].connectionstring; 
sqlconnection connpubs = new sqlconnection(connectionstringlocal); 
sqldataadapter dad = new sqldataadapter("select top 50 * from product", connpubs); 
dataset ds = new dataset(); 
dad.fill(ds); 
return ds; 
}

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