为ASP_NET应用程序启用SQL缓存

步骤一:

sql数据库必须开启ServiceBroker服务,首先检测是否已经启用ServiceBroker,检测方法:

SELECT DATABASEPROPERTYEX('dbName','IsBrokerEnabled') --1表示已经启用,0表示未启用

如果是创建的新数据库,默认是已启用(1)。如果还原数据库,默认是未启用(0)。

步骤二:

如果ServiceBroker没有启用,使用下面语句启用:

ALTER DATABASE dbName SET ENABLE_BROKER;

此行此语句时有可能时间会很长,对此可以重启SQL查询编辑再执行以上语句。

步骤三:

如果使用的是SQL Server 2005/2008版本数据库,只需在Page_Load或者Application_Start使用如下语句即可启用ASP.NET对应的SQL缓存:

SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

对于使用更低版本需要使用aspnet_regsql来配置。

另外,在最初时使用的是如下语句:

String[] tables = ConfigurationManager.AppSettings["CacheDataTable"].Split(',');

SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString, tables);

在使用上面的语句始终报异常:没有为 SQL 缓存通知启用数据库(不知道为什么)

步骤四:

通过以上步骤就可以编写相应的缓存代码,代码如下:

public class TableDependency
{
    protected char[] configurationSeparator = new char[] { ',' };

    protected AggregateCacheDependency dependency = new AggregateCacheDependency();

    protected TableDependency(string configKey)
    {
        string dbName = ConfigurationManager.AppSettings["CacheDatabaseName"];//要缓存的数据库名称
        string tableConfig = ConfigurationManager.AppSettings[configKey];//从配置文件中获取需要缓存的表,以','分隔
        string[] tables = tableConfig.Split(configurationSeparator);

        foreach (string tableName in tables)
            dependency.Add(new SqlCacheDependency(dbName, tableName));//把表以及对应的数据库添加到AggregateCacheDependency对象中
    }

    public AggregateCacheDependency GetDependency()
    {
        return dependency;
    }
}
String PHONE_HEAD_KEY="User_{0}";

String cacheKey = String.Format(PHONE_HEAD_KEY, ID);//缓存键

String data = (String)HttpRuntime.Cache[cacheKey];//首先从缓存来获取相应的数据

if (data == null)
{
    //从数据库获取
    data = db.GetData();

    //获取一个AggregateCacheDependency对象,UserTableDependency保存的是表
    AggregateCacheDependency cd = new TableDependency("UserTableDependency").GetDependency();

    //添加到缓存
    HttpRuntime.Cache.Add(cacheKey, data, cd, DateTime.Now.AddHours(10), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
}

Response.Write(data);

转载于:https://www.cnblogs.com/liangxuru/p/3267376.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值