SqlCacheDependency的使用

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

使用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>

时间: 2025-01-13 04:01:21

SqlCacheDependency的使用的相关文章

我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( 行级别更改)或者SQL 查询结果的变化. 以前也总结过缓存的使用 页面输出缓存:我用ASP.NET缓存之OutputCache 数据缓存:我用ASP.NET缓存之数据缓存 但是对缓存依赖还是很模糊,前阵子有幸在项目中实际运用了此类.现在结合自己的实际以及和网上大牛的经验,给大家分享一下. [使用背景

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

Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感觉有点浪费, 不很经济. Sql server 2005/2008下增加使用查询通知方式进行缓存失效检查, 它通过Sql Server内部的消息队列进行异步通知, 这样就大大减轻了服务器的压力, 实现的很经济, 下面就是具体的步骤: 1.检测是否已经启用Service Broker Select D

【转】SqlCacheDependency的使用 强大的功能

原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入]     最近我在忙于研究负载平衡、并发性容错性等性能优化问题,ASP.NET有太多强大的功能等待学习和挖掘。今天,Bosnma和大家一起研究在ASP.NET中缓存机制如何帮助我们在高流量网站中减少服务器负担。何为缓存          缓存无处不在,尤其是流量较高的网站。对于某些页面(尤其是带有一个或更多数据库操作的页面)可能会对数据库服务器带来过大的负载,而这些负载经常是不必要的。比如某公司的商品清单页面可能

DMSFrame 之SqlCacheDependency(二)

上篇文章介绍的是通知模式的缓存机制,这里介绍的是数据库轮循模式处理,这种模式对SQL2005以下的支持还是比较好的 引擎源码如下: /// <summary> /// 轮循模式 /// 数据库缓存通知模式 /// 1.SELECT DATABASEPROPERTYEX('DATABASENAME','IsBrokerEnabled') 1 表示启用,0表示未启用 /// 2.启用IsBrokerEnabled /// ALTER DATABASE [DATABASENAME] SET NEW_

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

Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Server 2005上执行 ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency特性. 添加一个 employee的数据库表. 1CREATETABLE[dbo].[employee](2[i

DMSFrame 之SqlCacheDependency(一)

1.SqlCacheDependency都是我们常用的一种Cache写法了.对后面的SQL 2005算是比较成熟的一种缓存模式了,这里介绍一下DMSFrame的SqlCacheDependency是怎么使用的 DMSFrame已内置MSSQL的通知模式(MSSQL2005以上,含2005)和轮循模式(MSSQL2005以下)的缓存写法. 查看数据库是否支持通知模式 SELECT DATABASEPROPERTYEX('DATABASENAME','IsBrokerEnabled') 1 表示启用

mvc 缓存 sqlCacheDependency 监听数据变化

对于MVC有Control缓存和Action缓存. 一.Control缓存 Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来. [OutputCache(Duration = 10)] public class HomeController : Controller { // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return

SqlDependency和SqlCacheDependency缓存的用法

SqlDependency配合ServiceBroker实现缓存 步骤一: sql数据库必须开启ServiceBroker服务,首先检测是否已经启用ServiceBroker,检测方法: Select  DATABASEpRoPERTYEX('dbname','IsBrokerEnabled') --1表示已经启用0表示没有启用 步骤二: 如果ServiceBroker没有启用,使用下面语句启用: ALTER  DATABASE  <数据库名称>  SET  ENABLE_BROKER; 步骤

缓存总结

缓存分为页面缓存,数据缓存,数据源缓存,页面缓存主要指的是webform页面中的outputcache标记以及他所带的一些属性,通过设置实现页面信息的缓存,数据源缓存类似于dataset这样的数据集以及微软封装好的那些缓存的插件可以实现,数据源缓存是对cache这个类进行的一些操作,这样的方式较为灵活,可以实现局部数据的缓存 缓存是存储于服务器上的可以供任何人访问的信息,这一点和cookie不同,cookie只能存在于个人客户端. 缓存分为普通缓存,文件缓存依赖和数据库缓存依赖. 普通缓存如:c