• 为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);
  • 相关阅读:
    YAML 语法小结
    小程序之脚本语言
    小程序WXML 使用小结
    微信小程序 js逻辑
    小程序开发1
    联想Y7000安装Ubuntu16.04/Win10双系统,wifi问题,显卡驱动和CUDA10安装
    VS2015中配置Eigen
    联想Y700安装显卡驱动和CUDA8.0
    php微信生成微信公众号二维码扫描进入公众号带参数
    Y7000 (1)安装ubuntu1604遇到的问题
  • 原文地址:https://www.cnblogs.com/liangxuru/p/3267376.html
Copyright © 2020-2023  润新知