最近项目需要几秒就获取一次数据,查数据库服务器压力会很大,因此用缓存技术来缓解服务器压力。

使用SqlCacheDependency采用轮询的方式来获取缓存,SqlDependency查询通知的方式来更新缓存应该更好,先说轮询的方式吧。

配置文件如下:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  <caching>
    <sqlCacheDependency enabled="true" pollTime="10000">
      <databases>
        <add name="msBaby" connectionStringName="conn"/>
      </databases>
    </sqlCacheDependency>
  </caching>
  </system.web>
  <connectionStrings>
    <add name="conn" connectionString="data source=SH-05\SA;initial catalog=Baby;user id=sa;password=123456;Asynchronous Processing=true;MultipleActiveResultSets=true;Integrated Security=True"/>
  </connectionStrings>
</configuration>

其中 connectionStringName="conn"是connectionStrings的name,name="msBaby" 中,msBaby就是数据库名称。

以下是代码示例:

基类

public class BaseCache
    {
        private string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

/// <summary>
        /// 获取缓存数据
        /// </summary>
        /// <param name="cacheName">缓存名</param>
        /// <param name="dataBaseName">数据库名</param>
        /// <param name="tableName">表名</param>
        /// <returns></returns>
        public DataTable GetCacheData(string cacheName, string dataBaseName, string tableName)
        {
            DataTable data = (DataTable)HttpRuntime.Cache[cacheName]; //获取缓存
            // 判断缓存数据为空  
            if (data == null)
            {
                // 获取数据  
                data = GetDataSource();
                SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, tableName);
                SqlCacheDependency depend = new SqlCacheDependency(dataBaseName, tableName);
                HttpContext.Current.Cache.Insert(cacheName, data, depend);
            }
            return data;
        }

public virtual DataTable GetDataSource()
        {
            return null;
        }
    }

数据库帮助类

public class DBHelper
    {
        private static string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

public static DataTable GetData(string sql, params SqlParameter[] parameters)
        {
            DataTable data;
            try
            {
                SqlConnection conn = new SqlConnection(connectionString);
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
                    data = new DataTable();
                    dataAdapter.Fill(data);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return data;
        }
    }

子类重写GetDataSource方法

public class Job : BaseCache
    {
        public override DataTable GetDataSource()
        {
            return DBHelper.GetData("SELECT TOP 50 * FROM job");
        }
    }

外部类中调用

Job job = new Job();

DataTable dt = job.GetCacheData("jobCache", "msBaby", "job");

这里的msBaby与webconfig中相同,job是数据库表名称。

<databases>
        <add name="msBaby" connectionStringName="conn"/>
</databases>

SqlCacheDependency的使用的更多相关文章

  1. DMSFrame 之SqlCacheDependency(二)

    上篇文章介绍的是通知模式的缓存机制,这里介绍的是数据库轮循模式处理,这种模式对SQL2005以下的支持还是比较好的 引擎源码如下: /// <summary> /// 轮循模式 /// 数 ...

  2. DMSFrame 之SqlCacheDependency(一)

    1.SqlCacheDependency都是我们常用的一种Cache写法了.对后面的SQL 2005算是比较成熟的一种缓存模式了,这里介绍一下DMSFrame的SqlCacheDependency是怎 ...

  3. 【缓存】Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结

    Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感 ...

  4. cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )

    Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...

  5. SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]

    前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1.     <ASP.NET 2.0开发指南> 2.   ...

  6. 使用SqlCacheDependency依赖项让数据库变化后缓存失效

    SqlCacheDependency可以使缓存在数据库或者数据库某张表或者字段变化后让指定缓存失效.对于一些需要及时显示的信息比较有用. 需要.net2.0以后设sql server2005及以后版本 ...

  7. sqlCacheDependency 更新缓存Cache

    第一步 修改web,config <!--定义数据库连接--> <connectionStrings>  <add name="NorthwindConnect ...

  8. asp.net mvc5中使用缓存依赖SqlCacheDependency

    缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...

  9. C#如何使用SqlCacheDependency

    1.数据库依赖类SqlCacheDependency 数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题. 语法定义: SqlCacheDependency ...

随机推荐

  1. DMVsinSQLServer -- 备

    /*************************************************************************************************** ...

  2. uestc Palindromic String

    字符串hash因为如果一个字符串是回文串,那么正着做哈希和反着做哈希结果应该一样.于是我们先正反各做一边哈希.如果判断出来一个字符串是回文穿那么这个字符串的前半部分和后半部分的重数一定相同,于是当前位 ...

  3. 字符串比较必须使用strcmp

    char s1[]="this" char *s2 = "this" if(s1=="this"){ printf("s1 is ...

  4. js判断终端是手机还是电脑

    $(function(){ function browserRedirect() { var sUserAgent= navigator.userAgent.toLowerCase(); var bI ...

  5. linux创建文件树,孩子兄弟树(或广义表),创建文件树及其訪问

    假设在Linux下要訪问一个目录. 我们须要知道一下系统调用. 1.opendir(path); //注意path是绝对路径 2.ptr=readdir(dir);//dir 为opendir();正 ...

  6. java获取当前路径的几种方法

    1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...

  7. WPF属性与特性的映射(TypeConverter)

    1,定义一个类 public class Human { public string Name { get; set; } public Human Child { get; set; } } 2在X ...

  8. (转)Java通过axis调用WebService

    转自:http://blog.csdn.net/wanglha/article/details/49679825 转载地址:http://www.linuxidc.com/Linux/2015-06/ ...

  9. [Swust OJ 1139]--Coin-row problem

    题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...

  10. I - Doing Homework again

    I - Doing Homework again Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...