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

DMSFrame已内置MSSQL的通知模式(MSSQL2005以上,含2005)和轮循模式(MSSQL2005以下)的缓存写法。

查看数据库是否支持通知模式

SELECT  DATABASEPROPERTYEX('DATABASENAME','IsBrokerEnabled') 1 表示启用,0表示未启用

启用IsBrokerEnabled

ALTER DATABASE [DATABASENAME] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [DATABASENAME] SET ENABLE_BROKER;/ALTER DATABASE [DATABASENAME] SET DISABLE_BROKER;

设置权限信息

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [当前数据库登录用户名,如果是sa可以跳过]

修改登录账号信息,这里比较关键,如果未设置有可能通知是没有权限的。具体也可以看看SQL日志信息

exec sp_changedbowner @loginame = '[当前数据库登录用户名,如果是sa,则使用sa账号]'

首先添加web.config的配置信息

<configSections>
<section name="DMSLinqCacheProvider" type="DMSFrame.Cache.DMSLinqCacheProvider,DMSFrame"/>
</configSections>
<DMSLinqCacheProvider>
<add key="provider" providerName="MsSql" value="DMSFrame.Cache.DMSLinqSqlWebCacheNotifyProvider,DMSFrame"/>
</DMSLinqCacheProvider>

最最重要的TableConfig配置数据库加上标记CacheDependency,已便支持CacheDependency

<TableConfiguration>
<Name>DefaultValue</Name>
<SqlType>MsSql</SqlType>
<WithLock>false</WithLock>
<Author>dbo</Author>
<CacheDependency>true</CacheDependency>
<ConnectString>Integrated Security=False;server=127.0.0.1;database=database;User ID=sa;Password=sa;Connect Timeout=30</ConnectString>
</TableConfiguration>

最后就是查询SQL了,

ToList(bool DependencyFlag) 增加了是否使用缓存的标记参数。
var resultAccess = DMS.Create<Adm_User>()
.Where(q => q.UserID == )
.Select(q => q.Columns(q.UserID, q.UpdateTime)).ToList(true);

通知模式的SQL运行跟踪如图:

相关下载:http://files.cnblogs.com/files/kingkoo/DMSFrameRights.zip 此版本为以前的一个版本,最新的版本请加群问群主吧

新上传DMSFrame版本文件:http://files.cnblogs.com/files/kingkoo/DMSFrame_Secure20150606.7z

内置代码引擎如下:

 /// <summary>
/// 数据库缓存通知模式
/// 1.SELECT DATABASEPROPERTYEX('DATABASENAME','IsBrokerEnabled') 1 表示启用,0表示未启用
/// 2.启用IsBrokerEnabled
/// ALTER DATABASE [DATABASENAME] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
/// ALTER DATABASE [DATABASENAME] SET ENABLE_BROKER;/ALTER DATABASE [DATABASENAME] SET DISABLE_BROKER;
///
/// 3.GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [当前数据库登录用户名,如果是sa可以跳过]
///
/// 4.exec sp_changedbowner @loginame = '[当前数据库登录用户名,如果是sa,则使用sa账号]'
///
/// </summary>
public class DMSLinqSqlWebCacheNotifyProvider : IDMSLinqCacheProvider
{ System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;
private static object syncObj = new object();
public DMSLinqSqlWebCacheNotifyProvider()
{
lock (syncObj)
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
if (context != null)
webCache = context.Cache;
else
webCache = System.Web.HttpRuntime.Cache;
}
} public string GetDependencyKey(System.Data.IDbCommand command, string[] tableNames)
{
string dependencyKey = command.CommandText;
foreach (System.Data.IDbDataParameter item in command.Parameters)
{
dependencyKey += string.Format("-{0}-{1}", item.ParameterName, item.Value);
}
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format("{0},use dependency key successfully", dependencyKey));
#endif
return dependencyKey;
} public object GetCache(string dependencyKey)
{
object resultValue = webCache[dependencyKey];
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format("this cache is empty?:{0}", resultValue == null ? "true" : "false"));
#endif
return resultValue;
}
public System.Web.Caching.CacheDependency GetCacheDependency(string connectionString, System.Data.IDbCommand command, string[] tableNames, ref string dependencyKey)
{
System.Web.Caching.SqlCacheDependency dependency = null;
try
{
dependency = new System.Web.Caching.SqlCacheDependency((System.Data.SqlClient.SqlCommand)command);
}
catch (Exception ex)
{
DMSFrame.Loggers.LoggerManager.Logger.Log(ex, ReflectionUtils.GetMethodBaseInfo(System.Reflection.MethodBase.GetCurrentMethod()), DMSFrame.Loggers.ErrorLevel.Fatal);
}
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format("Get the sqlcachedependency successfully.{0}", dependency == null ? "false" : "true"));
#endif
return dependency;
}
public void SetCache(System.Web.Caching.CacheDependency dependency, string dependencyKey, object Value)
{
if (dependency != null)
{
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format("Add cache is successfully,{0}", dependencyKey));
#endif
webCache.Insert(dependencyKey, Value, dependency);
}
}
}

DMSFrame 之SqlCacheDependency(一)的更多相关文章

  1. DMSFrame 之SqlCacheDependency(二)

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

  2. DMSFrame 之简单用法(二)

    上次说了下DMSFrame的一些查询方式,之前也有好多朋友问了下这个ORM与EF有什么样的区别. 要论区别,我自己也总结了几点.如果有其它朋友知道的,可以回复补充下. 1.不需要编辑的时候需要再次查询 ...

  3. DMSFrame 之简单用法(一)

    1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了.使用上有些地方还是比较方便的.DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护. ...

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

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

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

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

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

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

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

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

  8. sqlCacheDependency 更新缓存Cache

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

  9. SqlCacheDependency的使用

    最近项目需要几秒就获取一次数据,查数据库服务器压力会很大,因此用缓存技术来缓解服务器压力. 使用SqlCacheDependency采用轮询的方式来获取缓存,SqlDependency查询通知的方式来 ...

随机推荐

  1. mac下载百度云盘大文件及断点续传的方法

    问题 作为资源共享平台, 百度云做的还是很出色的, "xxx site:pan.baidu.com"就可以找到很丰富的资源. 然而, 下载百度云上的文件就略蛋疼了. 早在12年的时 ...

  2. proj01总结:spring jdbc操作

    commons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大.必须使用的jar包. commons-l ...

  3. paip.互联网产品要成功的要素

    paip.互联网产品要成功的要素 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/atti ...

  4. PHP--------memcache技术

    新事物的产生都不是偶然的 1.为什么会产生memcache? 在大型的电商web页面上,数据量庞大,大量用户需要同时访问海量的数据,为了提高用户的访问效果,如何才能让页面加载最快,更友好的展示到用户面 ...

  5. node.js WebService异常处理(domain)以及利用domain实现request生命周期的全局变量

    成熟的Web Service技术,例如Fast CGI.J2EE.php,必然会对代码异常有足够的保护,好的Web必然会在出错后给出友好的提示,而不是莫名其妙的等待504超时.而node.js这里比较 ...

  6. WORD2003电子签名插件(支持手写、签章)

    1.引言 WORD电子签名插件,支持手写.本地电子图章.以及网络图章功能.软件使用VC6,以ATL方式编写,软件小巧精致. 这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了一个多月的时间, ...

  7. eclipse 引用自己开发的模块

    这样就可以 生成的是LIB 工程需要设置“Is Library”

  8. [3].jekyll的基础

    一.创建新项目 以下是一个获取最简单 Jekyll 模板并生成静态页面的方法.: Administrator@FANGPENG /e $ jekyll new myblog # 创建名为 myblog ...

  9. android如何播放和录制音频

    视频录制功能正在走来,在Androidsdk中有与之相关的类:android.media.MediaRecorder.当然,因为模拟器上没有提供必要的硬件设施,所以在学习过程中并不能实现.Media能 ...

  10. ThinkBox DOC

    插件源码下载 @github https://github.com/Aoiujz/ThinkBox.git 插件使用方法 引入文件 //使用ThinkBox弹出框必须引入以上三个文件. //jQuer ...