DMSFrame 之SqlCacheDependency(一)
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(一)的更多相关文章
- DMSFrame 之SqlCacheDependency(二)
上篇文章介绍的是通知模式的缓存机制,这里介绍的是数据库轮循模式处理,这种模式对SQL2005以下的支持还是比较好的 引擎源码如下: /// <summary> /// 轮循模式 /// 数 ...
- DMSFrame 之简单用法(二)
上次说了下DMSFrame的一些查询方式,之前也有好多朋友问了下这个ORM与EF有什么样的区别. 要论区别,我自己也总结了几点.如果有其它朋友知道的,可以回复补充下. 1.不需要编辑的时候需要再次查询 ...
- DMSFrame 之简单用法(一)
1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了.使用上有些地方还是比较方便的.DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护. ...
- 【缓存】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 ...
- SqlCacheDependency的使用
最近项目需要几秒就获取一次数据,查数据库服务器压力会很大,因此用缓存技术来缓解服务器压力. 使用SqlCacheDependency采用轮询的方式来获取缓存,SqlDependency查询通知的方式来 ...
随机推荐
- Node.js 爬虫,自动化抓取文章标题和正文
持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ...
- Atitit. 异常的使用总结最佳实践java .net php Vo8f
Atitit.java 异常的使用总结最佳实践 Vo8f 1. 为什么使用异常 1 2. 用throw抛出一个异常到catch子句中与通过函数调用传递一个参数两者基本相同. 2 3. S E H的主要 ...
- iOS开发——高级技术&iCloud服务
iCloud服务 iCloud 是苹果提供的云端服务,用户可以将通讯录.备忘录.邮件.照片.音乐.视频等备份到云服务器并在各个苹果设备间直接进行共享而无需关心数据同步问题,甚至 即使你的设备丢失后在一 ...
- iOS-App生命周期
iOS APP 生命周期 官方文档: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneO ...
- Leetcode 67 Add Binary 大数加法+字符串处理
题意:两个二进制数相加,大数加法的变形 大数加法流程: 1.倒置两个大数,这一步能使所有大数对齐 2.逐位相加,同时进位 3.倒置两个大数的和作为输出 class Solution { public: ...
- Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
第一步:修改liferay-hook.xml <?xml version="1.0"?> <!DOCTYPE hook PUBLIC "-//Lifer ...
- XXXXXXXX系统失败总结
2013年底因同事离职接手了他负责的<XXXXXX病例系统>,当时由3个刚毕业的同事在做,框架使用Spring+Hibernate+SpringMVC+EasyUI,因为当时的主力开发人员 ...
- 在Eclipse中使用MAT分析Android程序内存使用状况(转)
对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...
- iframeWin For Easy UI. 为 Easy UI 扩展的支持IFrame插件
iframeWin For Easy UI. 为 Easy UI 扩展的支持IFrame插件 在一个项目中用了Easy UI,但是发现里面的 Dialog .Window.Messager 弹窗都不支 ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...