zoukankan      html  css  js  c++  java
  • 为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);
  • 相关阅读:
    maven的pom.xml文件详细说明
    python 给视频添加马赛克
    cv2.VideoCapture 图像旋转问题
    三分钟理解知识蒸馏
    深度学习、机器学习常见概念及理解(持续更新)
    python用直方图规定化实现图像风格转换
    1分钟理解人体姿态估计与行为识别
    数据清洗要点
    3分钟理解NMS非极大值抑制
    python用pandas遍历csv文件
  • 原文地址:https://www.cnblogs.com/liangxuru/p/3267376.html
Copyright © 2011-2022 走看看