Sqlserver2000 下的sql cache dependency小例

简单来说,b/s结构的应用程序中,为了提高应用程序访问性能,要兼顾数据实时性与访问效率个方面。这就要用缓存这一概念, 除去页输出缓存以外,asp.net 提供了三种缓存机制:

  • 其它缓存对象依赖;
  • 文件或文件夹依赖;
  • 数据库查询依赖。

 

其中,以数据库查询缓存依赖这一功能是asp.net2.0 中最为强大的一项内容。一旦检测到数据库中的数据表内容有任何变化,它可以使一个cached data object自动失效.  以下是一个小例子:

要使用这个功能,你得了解sqlserver 几种版本的数据库的区别,sqlserver 2005默认是具有这个功能的,而更低版本的,而7.0以上版本,你得用aspnet_regsql.exe 这个功能来做个简单的配置.

以2000版的sqlserver 来说:

vs.net2005命令提示下,如果我想监视我的数据库bookshop 下的book记录基于表,那么就是

aspnet_regsql  -S localhost -U sa -P pwd -ed -d bookshop -et -t book

这样就算简单的配置完了(具体参数代表什么内容请查询aspnet_regsql.exe 的帮助内容)

本命令会在数据库中生成系列的新内容,像AspNet_SqlCacheRegisterTableStoredProcedure,

AspNet_SqlCacheUnRegisterTableStoredProcedure,AspNet_SqlCacheUpdateChangeIdStoredProcedure,

AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,AspNet_SqlCachePollingStoredProcedure,

还有在相应的数据下会生成一个AspNet_SqlCacheTablesForChangeNotification表.

不管它。我们接着进入下一步,配置web.config文件

例如:

 <system.web>


    <caching>
      <sqlCacheDependency enabled="true">

        <databases>
          <add name="bookshop" connectionStringName="bookshopConnectionString"  pollTime="500" />
         
        </databases>
       
      </sqlCacheDependency>
     
     
     
    </caching>

.....

这里注意:bookshopConnectionString 是web.config 里面配置的一个连接字符串的名称.

对应上面的语句,我的连接字符串是:

<connectionStrings>
    <add name="bookshopConnectionString" connectionString="Data Source=localhost;Initial Catalog=bookshop;Persist Security Info=True;User ID=sa;Password=asen" providerName="System.Data.SqlClient"/>
  </connectionStrings>

好了,下面就只剩下编程的细节了。

简单的一个示例:

page_load 里面

 if (!IsPostBack)
        {

            if (HttpContext.Current.Cache["mycache"] == null)
            {

                string test = "这是测试对象内容";
                object o = (object)test;

                SqlCacheDependency sqlDependency = new SqlCacheDependency("bookshop", "book");
                HttpContext.Current.Cache.Insert("mycache", o, sqlDependency, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);
            }
        }

 

在面页上添加的一个按钮事件处理函数里面:


                if (HttpContext.Current.Cache["mycache"]==null)
        {
            Response.Write("已失效!");
        }
        else
        {

            Response.Write(HttpContext.Current.Cache["mycache"].ToString() + "60秒以后过期");
 
        }

 

这些代码的意思,就是说,Cache["mycache"]里面数据,默认会在自生成起60秒钟内有效,当然,如果在些期间,数据库bookshop里面的表book内容有任何改动,Cache["mycache"]对象将会被从内存中删除掉。

值得注意的一点是

  SqlCacheDependency sqlDependency = new SqlCacheDependency("bookshop", "book");
这里的bookshop 是

<caching>
      <sqlCacheDependency enabled="true">

        <databases>
          <add name="bookshop" connectionStringName="bookshopConnectionString"  pollTime="500" />
         
        </databases>
       
      </sqlCacheDependency>
     
     
     
    </caching>

这里添加进去的数据名称,后面的book是数据库bookshop里面的表名称.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值