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

使用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. 解密电子书之二:EPD控制芯片

    EPD控制芯片大致上相当于计算机的显卡,没了它,所有电子书都变白板.类似显卡中的ATI与NVIDIA,EPD控制芯片中也是两家:Surf(泰信科)和EPSON(爱普生),其中爱普生是最早推出电子纸显示 ...

  2. 关于java同步包中ConcurrentLinkedQueue类的深入分析与理解

    一,官方描写叙述 一个基于连接节点的无界线程安全队列.这个队列的顺序是先进先出.队列头部的元素是留在队列中时间最长的,队列尾部的元素是留在队列中时间最短的.新元素被插入到元素的尾部,队列从队列的头部检 ...

  3. Eclipse debug ‘Source not found’

    用Eclispe进行Debug时一直被一个问题所困扰:Source not found. 问题产生的原因是调试进入了一个没有源代码的jar包里. 简短说明: Edit Source Lookup Pa ...

  4. HDU1963 && POJ2063:Investment(完全背包)

    Problem Description John never knew he had a grand-uncle, until he received the notary’s letter. He ...

  5. 通过 CsvListWriter 读写.csv文件辅助类

    package cn.gov.cnis.db; import java.io.File; import java.io.FileReader; import java.io.FileWriter; i ...

  6. VBA 开发学习--基础语法3

    VBA字符串函数列表 Trim(string) 去掉string左右两端空白 Ltrim(string) 去掉string左端空白 Rtrim(string) 去掉string右端空白 Len(str ...

  7. eclipse中删除多余的工作空间记录

    所以对于不再使用的工作空间,每次出现在eclipse的“文件”>>“切换工作空间”里面的时候就觉得特别不爽. 所以认真研究了eclipse目录之后让我找到了,删除不需要工作空间记录的方法. ...

  8. hosts文件简析

    什么是hosts文件 hosts文件是个什么文件呢?Hosts虽然没有后缀名,其实是个纯文本文件,可以用记事本等文本编辑软件打开.Hosts文件主要用于在本地电脑强制解析域名,Hosts文件里包含映射 ...

  9. WPF利用依赖属性和命令编写自定义控件

    以实例讲解(大部分讲解在代码中) 1,新建一个WPF项目,添加一个用户控件之后在用户控件里面添加几个控件用作测试, <UserControl x:Class="SelfControlD ...

  10. C++ template学习二 类模板定义及实例化

    一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员.默写成员函数的参数.某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的). 如果一个类中数据成员 ...