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

WAP 流量統計平台開發心得:Cache 依賴機制實戰應用

     編輯:關於ASP.NET

在「他舅網 WAP 流量統計分析平台」開發中,為提升效能大量使用 Cache,但面臨資料同步與失效時機的挑戰。本文分享兩種 CacheDependency 實戰模式:檔案依賴與 SQL 快取依賴。

一、檔案依賴

將使用者權限序列化為 XML 檔案,管理員更新資料時同步寫入檔案,Cache 綁定檔案變更自動失效。

XmlDocument doc = Cache["user"] as XmlDocument;
if (doc == null)
{
    doc = new XmlDocument();
    string filePath = Server.MapPath("user.xml");
    CacheDependency dep = new CacheDependency(filePath);
    doc.Load(filePath);
    Cache.Insert("skin", doc, dep
        , Cache.NoAbsoluteExpiration
        , TimeSpan.FromMinutes(30));
}

優點:實作簡單、即時失效。
適用:單機部署、資料更新頻率低、結構簡單的設定檔。

二、SQL 快取依賴

針對資料庫表格變更自動使 Cache 失效,適合分散式部署與高頻更新場景。

設定步驟

  1. Web.config 啟用 sqlCacheDependency:
    <configuration>
      <connectionStrings>
        <add name="connStr" connectionString="server=192.168.1.24;uid=sa;pwd=l23;database=CacheTest;"/>
      </connectionStrings>
      <system.web>
        <caching>
          <sqlCacheDependency>
            <databases>
              <add name="entryName" connectionStringName="connStr" pollTime="50000"/>
            </databases>
          </sqlCacheDependency>
        </caching>
      </system.web>
    </configuration>
  2. 資料庫啟用查詢通知(SQL Server 2005+):
    -- 啟用資料庫 Broker
    ALTER DATABASE CacheTest SET ENABLE_BROKER;
    -- 建立佇列與服務
    CREATE QUEUE ContactChangeQueue;
    CREATE SERVICE ContactChangeService ON QUEUE ContactChangeQueue ([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
    -- 啟用表格通知
    CREATE TRIGGER tr_Contact_Change ON Contacts
    AFTER INSERT, UPDATE, DELETE
    AS
    BEGIN
        -- 通知機制由 SqlDependency 自動處理,無需手動發送
    END
  3. 程式碼使用 SqlCacheDependency:
    using (var conn = new SqlConnection(connStr))
    using (var cmd = new SqlCommand("SELECT Id, Name FROM dbo.Contacts", conn))
    {
        var dep = new SqlCacheDependency(cmd);
        var adapter = new SqlDataAdapter(cmd);
        var dt = new DataTable();
        adapter.Fill(dt);
        Cache.Insert("contacts", dt, dep);
    }

兩種模式比較

維度檔案依賴SQL 依賴
部署架構單機/共享磁碟分散式/資料庫叢集
即時性檔案系統通知 (近即時)查詢通知/輪詢 (可配置 pollTime)
複雜度低高 (需資料庫權限、Broker、佇列)
資料類型任意序列化物件DataTable/DataSet/自訂物件

實戰建議

  • 權限、設定類靜態資料 → 檔案依賴。
  • 業務核心資料、多伺服器同步 → SQL 依賴。
  • 搭配滑動過期 SlidingExpiration 平衡記憶體與命中率。
  • 監控 Cache 命中率與失效頻率,避免「快取抖動」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved