为微软企业库缓存块添加SqlDependency
2010-05-30 15:42
120 查看
微软企业库缓存块中并没有提供像System.Web.Caching下的SqlCacheDependency
那我们就为它添加一个吧。
我们可以直接包接System.Web.Caching的SqlCacheDependency
public class SqlDependency : ICacheItemExpiration
{
private SqlCacheDependency _sqlCacheDependency;
public SqlDependency(string databaseEntryName, string tableName)
{
_sqlCacheDependency = new SqlCacheDependency(databaseEntryName, tableName);
}
#region ICacheItemExpiration Members
public bool HasExpired()
{
return _sqlCacheDependency.HasChanged;
}
public void Initialize(CacheItem owningCacheItem)
{ }
public void Notify()
{ }
#endregion
}
并在web.config中添加如下配置
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000"> // pollTime设置为1秒,仅仅为了测试,希望马上看到效果
<databases>
<add name="DatabaseName" connectionStringName="DatabaseName" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
我们需要开启数据库的MSSQL缓存通知功能,使用工具老是会让人忘记,呼,记忆力不好啊。
System.Web.Caching中提供了一个类SqlCacheDependencyAdmin,可以提供我们管理功能。
string connectionString = "..."
string tableName = "..."
SqlCacheDependencyAdmin.EnableNotifications(connectionString); // 开启数据库的Sql缓存通知功能
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, tableName); // 开启数据库某表的Sql缓存通知
不过此方法依赖性太强,依赖于MS SqlServer数据库,并且需要每间隔poolTime的时候就去轮询数据库中的AspNet_SqlCacheTablesForChangeNotification表,去查看表数据是否更改。
-------------------------------------------------------------------
如果不用SqlDependency,有什么方法可以有效的移除缓存呢?
表1: 添加缓存Key1,添加缓存Key2...
表2: 添加缓存Key3
表3:添加缓存Key4, 添加缓存Key5, 添加缓存Key6...
表1更改时,移除Key1, Key2
表2更改时,移除Key3
表3更改时,移除Key4, Key5, Key6
-------------------------------------------------------------------- 这种原始方法绝对可以满足要求
缺点:我们严重依赖缓存键值,如果添加缓存的位置键值发生更改,我们也需要到移除缓存的位置去更改。
我们可以使用分组
表1: 添加缓存Key1,添加缓存Key2..., group1
表2: 添加缓存Key3, group2
表3:添加缓存Key4, 添加缓存Key5, 添加缓存Key6..., group3
表1更改时,移除group1
表2更改时,移除group2
表3更改时,移除group3
效果非常好。
那我们就为它添加一个吧。
我们可以直接包接System.Web.Caching的SqlCacheDependency
public class SqlDependency : ICacheItemExpiration
{
private SqlCacheDependency _sqlCacheDependency;
public SqlDependency(string databaseEntryName, string tableName)
{
_sqlCacheDependency = new SqlCacheDependency(databaseEntryName, tableName);
}
#region ICacheItemExpiration Members
public bool HasExpired()
{
return _sqlCacheDependency.HasChanged;
}
public void Initialize(CacheItem owningCacheItem)
{ }
public void Notify()
{ }
#endregion
}
并在web.config中添加如下配置
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000"> // pollTime设置为1秒,仅仅为了测试,希望马上看到效果
<databases>
<add name="DatabaseName" connectionStringName="DatabaseName" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
我们需要开启数据库的MSSQL缓存通知功能,使用工具老是会让人忘记,呼,记忆力不好啊。
System.Web.Caching中提供了一个类SqlCacheDependencyAdmin,可以提供我们管理功能。
string connectionString = "..."
string tableName = "..."
SqlCacheDependencyAdmin.EnableNotifications(connectionString); // 开启数据库的Sql缓存通知功能
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, tableName); // 开启数据库某表的Sql缓存通知
不过此方法依赖性太强,依赖于MS SqlServer数据库,并且需要每间隔poolTime的时候就去轮询数据库中的AspNet_SqlCacheTablesForChangeNotification表,去查看表数据是否更改。
-------------------------------------------------------------------
如果不用SqlDependency,有什么方法可以有效的移除缓存呢?
表1: 添加缓存Key1,添加缓存Key2...
表2: 添加缓存Key3
表3:添加缓存Key4, 添加缓存Key5, 添加缓存Key6...
表1更改时,移除Key1, Key2
表2更改时,移除Key3
表3更改时,移除Key4, Key5, Key6
-------------------------------------------------------------------- 这种原始方法绝对可以满足要求
缺点:我们严重依赖缓存键值,如果添加缓存的位置键值发生更改,我们也需要到移除缓存的位置去更改。
我们可以使用分组
表1: 添加缓存Key1,添加缓存Key2..., group1
表2: 添加缓存Key3, group2
表3:添加缓存Key4, 添加缓存Key5, 添加缓存Key6..., group3
表1更改时,移除group1
表2更改时,移除group2
表3更改时,移除group3
效果非常好。
相关文章推荐
- .NET 类库研究必备参考 添加微软企业库源码
- 类似于新浪博客;添加关注的浮动框:使用微软的MopUp控件仿作的
- 微软企业库调用Oracle存储过程返回(1个或多个)数据集
- 微软企业库4.1学习笔记(三)企业库迁移和并行使用,以及企业库的扩展
- 微软企业库4.1学习笔记(四)主要的功能模块简介
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
- 使用微软企业库-缓存
- 微软企业库4.1学习笔记(二十五)Unity依赖注入模块2
- 如何在VS2005里添加微软的symbols
- 向TreeView 控件添加数据绑定功能(从微软处转载)
- 微软企业库5.0学习笔记(三十五)数据访问模块 DataSet以及数据库事务
- 微软企业库5.0学习笔记(六)创建并引用企业库对象
- 微软企业库5.0学习笔记(10)ASP.NET模块依赖注入
- 微软企业库5.0学习笔记(六)
- 微软企业库缓存
- 教你在网页中添加微软地图
- 动态修改微软企业库的连接字符串
- 转扩展微软DDK中的NDIS IM驱动的功能:添加一个DeviceIoControl接口
- 微软企业库 Microsoft Enterprise Library
- [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)