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

Hxj.Data 元件(二十三):自訂快取策略——刷新、過期時間與依賴靈活控制

     編輯:關於ASP.NET

Hxj.Data ORM 框架內建快取機制支援配置層級設定,但實務上常需針對單一查詢自訂快取行為。本文介紹三大擴充方法:Refresh()、SetCacheTimeOut()、SetCacheDependency(),實現查詢級快取精細控制。

1. 強制刷新快取

// 直接查詢資料庫,並更新快取
var product = DbSession.Default.From<Products>()
    .Where(Products._.ProductID == 1)
    .Refresh() // 忽略快取,重新查詢並重建快取
    .ToFirst();

適用場景:資料剛更新、管理員手動刷新、關鍵業務需最新資料。

2. 設定查詢快取過期時間

// 此查詢快取 180 秒,覆蓋全域配置
var product = DbSession.Default.From<Products>()
    .Where(Products._.ProductID == 1)
    .SetCacheTimeOut(180) // 秒
    .ToFirst();

// 後續 180 秒內相同查詢直接命中快取
var cached = DbSession.Default.From<Products>()
    .Where(Products._.ProductID == 1)
    .ToFirst();

注意:即使全域配置未啟用該實體快取,此設定仍會生效。

3. 設定快取依賴

// 綁定檔案變更失效
var dep = new System.Web.Caching.CacheDependency(Server.MapPath("~/2.txt"));
var product = DbSession.Default.From<Products>()
    .Where(Products._.ProductID == 1)
    .SetCacheDependency(dep)
    .ToFirst();

// 2.txt 未變更時,快取持續有效

支援類型:CacheDependency (檔案/目錄)、SqlCacheDependency (資料表)、AggregateCacheDependency (多重依賴)。

組合使用範例

var product = DbSession.Default.From<Products>()
    .Where(Products._.ProductID == 1)
    .SetCacheTimeOut(300)
    .SetCacheDependency(fileDep)
    .Refresh() // 立即刷新並套用上述策略
    .ToFirst();

快取鍵值生成規則

快取鍵基於 **生成的 SQL 語句**,因此:

  • 相同查詢條件、相同順序 → 相同 SQL → 命中快取。
  • 條件順序不同 (如 Where(A).Where(B) vs Where(B).Where(A)) → SQL 不同 → 錯失快取、浪費記憶體。
  • 建議:統一查詢建構順序,或使用參數化查詢確保 SQL 一致性。

最佳實踐建議

  1. 預設開啟全域快取配置,單一查詢以擴充方法微調。
  2. 寫入操作 (Insert/Update/Delete) 後,對相關實體呼叫 Refresh() 或清除快取。
  3. 監控快取命中率,避免低命中率查詢佔用記憶體。
  4. 分散式部署時,改用 Redis/Memcached 等共享快取提供者。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved