为微软企业库缓存块添加SqlDependency

微软企业库缓存块中并没有提供像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

效果非常好。





你可能感兴趣的:(dependency)