SqlCacheDependency-数据库缓存依赖简单操作笔记

参考1参考2,等

一.环境配置

首先通过.net Framework 2.0以上的版本文件夹里找到aspnet_regsql.exe,例如:
“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regsql.exe”
配置下系统环境,如果已经有就省了,不配也行。

二.cmd命令

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

根据上面的简单介绍(详细的-?获取)例如指定一个表采用sqlcachedependency功能:

>aspnet_regsql  -S ip -U 用户名 -P 密码 -d 数据库 -t 表 -et

三.Web.Config配置

配置文件增加下面的代码

<configuration>
  <connectionStrings>
    <add name="ASqlServer" connectionString="server=localhost;Trusted_Connection=true;database=ceshi" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <caching>
      <sqlCacheDependency enabled="true" pollTime="1000">
        <databases>
          <add name="CacheData" connectionStringName="ASqlServer" pollTime="1000"/>
        </databases>
      </sqlCacheDependency>
    </caching>
  </system.web>
</configuration>

四.代码

using System.Web;
using System.Web.Caching;

            if (HttpContext.Current.Cache["select"] == null)
            {
				/*获取数据table,这里略了*/
				DataTable table=new  DataTable();				
                AggregateCacheDependency acd = new AggregateCacheDependency();
                acd.Add(new SqlCacheDependency("CacheData","pm"));//第一个参数不是真实数据库的名字,是Web.Config文件sqlCacheDependency下的name;第二个参数是采用sqlcachedependency功能的表名pm。
                HttpRuntime.Cache.Add("select", table, acd, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);          
                return table;
            }
            else
            {
                return (DataTable)HttpContext.Current.Cache["select"];
            }

如果SqlCacheDependency第二个参数:表名填的是没有经过第二步启用缓存通知的表,会报错:没有为 SQL 缓存通知启用数据库“CacheData”中的“t_company”表。

五.效果总结

就是当数据库里启用缓存通知的表,如第四步pm表内有insert,delete,update操作时,会在之前启用缓存通知时自动创建的AspNet_SqlCacheTablesForChangeNotification表里给对应的changeId字段加1,如图。

当changeId变更时,之前的缓存就会因为缓存依赖被清除。然后重新获取数据重新插入缓存。
而且要注意还是会有一丢丢清理缓存延迟的,就是在操作表更新某字段时,立马执行步骤四,还是能到缓存里获取到数据的。但是延迟很小,可能是代码比较简单,所以能手动测试出来。__(:з)∠)_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值