您的位置:首页 > 数据库

为微软企业库缓存块添加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

效果非常好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: