首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET PetShop 4.0 緩存依賴架構與 SqlCacheDependency 實戰

     編輯:關於.NET

前言

高訪問、低更新場景下緩存至關重要。PetShop 4.0 採用工廠模式+配置驅動實現靈活緩存依賴管理,核心利用 .NET 2.0 SqlCacheDependency 與 AggregateCacheDependency。

四大緩存相關命名空間

PetShop.ICacheDependency          // 接口定義
PetShop.TableCacheDependency      // 表依賴實現 (抽象基類 + 具體表類)
PetShop.CacheDependencyFactory    // 工廠創建與門面
PetShop.Web                       // Web 層代理調用

各層實現詳解

1. 接口層:ICacheDependency

public interface IPetShopCacheDependency
{
    AggregateCacheDependency GetDependency(); // 無參數,返回聚合依賴
}

AggregateCacheDependency (2.0 新增) 組合多個 CacheDependency。

2. 實現層:TableCacheDependency

抽象基類

protected TableDependency(string configKey)
{
    string dbName = ConfigurationManager.AppSettings["CacheDatabaseName"];
    string tableConfig = ConfigurationManager.AppSettings[configKey];
    string[] tables = tableConfig.Split(',');
    foreach (string tableName in tables)
        dependency.Add(new SqlCacheDependency(dbName, tableName));
}
  • 讀取 CacheDatabaseName 與表依賴配置鍵
  • 構建 SqlCacheDependency 數組加入聚合依賴
  • 關鍵:SqlCacheDependency 建立緩存項與 SQL Server 表變更的綁定

具體表依賴類


// Category 依賴 Category 表
public class Category : TableDependency 
{ public Category() : base("CategoryTableDependency") {} }

// Product 依賴 Product, Category 表
public class Product : TableDependency 
{ public Product() : base("ProductTableDependency") {} }

// Item 依賴 Product, Category, Item 表
public class Item : TableDependency 
{ public Item() : base("ItemTableDependency") {} }

3. Web.config 緩存配置

<!-- 依賴程序集:SQL Server 使用 TableCacheDependency,Oracle 留空 -->
<add key="CacheDependencyAssembly" value="PetShop.TableCacheDependency"/>
<add key="CacheDatabaseName" value="MSPetShop4"/>
<add key="CategoryTableDependency" value="Category"/>
<add key="ProductTableDependency" value="Product,Category"/>
<add key="ItemTableDependency" value="Product,Category,Item"/>
<add key="CategoryCacheDuration" value="1"/> <!-- 小時 -->

4. 工廠層:CacheDependencyFactory

DependencyAccess (底層工廠)

private static IPetShopCacheDependency LoadInstance(string className)
{
    string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
    string fullyQualifiedClass = path + "." + className;
    return (IPetShopCacheDependency)Assembly.Load(path).CreateInstance(fullyQualifiedClass);
}

反射創建實例,三個公共方法分別返回 Category/Product/Item 依賴。

DependencyFacade (門面層)

  • 三對應方法返回 AggregateCacheDependency
  • 讀取配置決定調用 DAL 或返回 null (Oracle 模式)

5. Web 層代理調用

CategoryDataProxy、ItemDataProxy、ProductDataProxy 分別調用門面獲取依賴。

WebUtility 緩存實戰代碼

if (data == null)
{
    int cacheDuration = int.Parse(ConfigurationManager.AppSettings["CategoryCacheDuration"]);
    data = category.GetCategory(categoryId).Name; // 業務層獲取數據
    
    AggregateCacheDependency cd = DependencyFacade.GetCategoryDependency();
    
    HttpRuntime.Cache.Add(cacheKey, data, cd, 
        DateTime.Now.AddHours(cacheDuration), 
        Cache.NoSlidingExpiration, 
        CacheItemPriority.High, null);
}

緩存策略對比

結語

PetShop 4.0 緩存架構亮點:

  1. 配置驅動:表依賴關係、數據庫名、程序集全在 web.config 維護
  2. 聚合依賴:單緩存項綁定多表變更,任一表更新即失效
  3. SqlCacheDependency:利用 SQL Server 2005+ 查詢通知機制,無需輪詢
  4. 分層解耦:接口→實現→工廠→門面→代理,各層單一職責

缺憾:SqlCacheDependency 僅支援 SQL Server,Oracle 需自定義實現(配置留空)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
策略機制PetShop 採用
主動檢查每次訪問判斷緩存是否存在,無則重載✓ 採用
回調重建CacheItemRemovedCallback 失效時自動重建未採用