.Net?2.0?缓存使用

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

 建立缓存依赖:


 ???????
/**/
/**/
/**/
/**/
/**/
/**/
/**/
///?<summary>
 ????????///?建立缓存依赖项
 ????????///?</summary>
 ????????///?<returns></returns>
 ????????
private
?AggregateCacheDependency?TableDependency()

 ????????...
...
{
 ????????????AggregateCacheDependency?dependency?=?new?AggregateCacheDependency();
 ????????????dependency.Add(new?SqlCacheDependency("MSPetShop4",?"表名称"));

 ????????????return?dependency;
 ????????}

?一个非常简单的方法,首先我们先看看两个.NET?.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?connectionStringNameLocalConnString?pollTime10000/></>中配置了数据库信息,SqlCacheDependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。(注意)name必须和new

 SqlCacheDependency(,?表名称)中的数据库名称相一致。更多的配置信息可以查看(MSDN帮助文档)。

 使数据库支持SqlCacheDependency特性:

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

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

 aspnet_regsql工具位于WindowsMicrosoft.NETFramework[版本]文件夹中,如果要配置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?t?Item?et
 aspnet_regsql?t?Product?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;
 ????????}

 就这么简单:)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|