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>
SqlCacheDependency的使用的更多相关文章
- DMSFrame 之SqlCacheDependency(二)
上篇文章介绍的是通知模式的缓存机制,这里介绍的是数据库轮循模式处理,这种模式对SQL2005以下的支持还是比较好的 引擎源码如下: /// <summary> /// 轮循模式 /// 数 ...
- DMSFrame 之SqlCacheDependency(一)
1.SqlCacheDependency都是我们常用的一种Cache写法了.对后面的SQL 2005算是比较成熟的一种缓存模式了,这里介绍一下DMSFrame的SqlCacheDependency是怎 ...
- 【缓存】Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结
Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感 ...
- cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )
Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...
- SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
前言 本文主要是对<ASP.NET 2.0开发指南>——<数据缓存>章节内容的提取并略有补充. 参考资料 1. <ASP.NET 2.0开发指南> 2. ...
- 使用SqlCacheDependency依赖项让数据库变化后缓存失效
SqlCacheDependency可以使缓存在数据库或者数据库某张表或者字段变化后让指定缓存失效.对于一些需要及时显示的信息比较有用. 需要.net2.0以后设sql server2005及以后版本 ...
- sqlCacheDependency 更新缓存Cache
第一步 修改web,config <!--定义数据库连接--> <connectionStrings> <add name="NorthwindConnect ...
- asp.net mvc5中使用缓存依赖SqlCacheDependency
缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...
- C#如何使用SqlCacheDependency
1.数据库依赖类SqlCacheDependency 数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题. 语法定义: SqlCacheDependency ...
随机推荐
- html中上标、下标、删除字、小号字等
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- FIDO联盟:我们将杀死密码
前不久发布的三星S5与iPhone 5S一样,配备了指纹识别技术.但更为重要的是,这一识别器可以与PayPal关连,进而与多种支付系统相连.通过这一过程,你很可能会摆脱密码,用指纹就可以畅游网络.当然 ...
- HDU 5723 Abandoned country(最小生成树 + 树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5723 [题目大意] n座城市,m条路径,求解: 1.最短的路径和,使得n座城市之间直接或者间接连通 ...
- php使用check box
if (isset($_POST['submit'])) { foreach ($_POST['todelete'] as $delete_id) { //这里是循环遍历这个数组 todelete 每 ...
- jQuery $.each用法比较详细了
以下内容非原创,来自百度文库http://wenku.baidu.com/view/4796b6145f0e7cd18425368e.html 通过它,你可以遍历对象.数组的属性值并进行处理. 使用说 ...
- 一步一步学android之布局管理器——RelativeLayout
今天开始学习RelativeLayout(相对布局),相对布局在平时布局的时候用的较多,因为Android适配方面的原因.相对布局可以控制组件摆放的位置(放在任一组件的上下左右等位置),下面来看看类的 ...
- http 双向通信之port映射
新产品开发了近2-3个月,给到客户做试用的时候,发现一个开发这么久从未考虑到的一个通信问题,mark下,下次开发同类产品的时候长点记性了. 产品由client与服务端两部分组成,client与服务端须 ...
- C# OR/Mapping 数据处理模式学习
为什么要提出O/R Mapping概念 程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论.然而数据库模型却从未随着开发语言的进步而随之革新,仍然使用面向关系的 ...
- sql server dateadd()
定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式.number 是您希望添加的 ...
- Asp.net 获取服务器指定文件夹目录文件,并提供下载
string dirPath = HttpContext.Current.Server.MapPath("uploads/"); if (Directory.Exists(dirP ...