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

NHibernate 一級快取全解析:Session 緩存機制、Get/Load 差異與程式化管理

     編輯:關於.NET

一級快取本質

ISession 快取屬交易級、內建、生命週期隨 Session。操作資料時優先查快取,無則查庫並存入。

行為驗證

同一 Session 重複讀取

第一次查庫,第二次直接回傳快取物件(Assert.AreSame 通過)。

同Session二次讀取命中快取

不同 Session 讀取同一實體

兩 Session 快取獨立,各自查庫一次,證明一級快取不共享。

不同Session各自查庫

Get() vs Load() 關鍵差異

方法行為
Get(id)立即查庫,物件立即放入快取
Load(id)延遲載入:僅建立 Proxy,真正存取屬性時才查庫並放入快取

驗證:

  • Get:訪問 ID 與其他屬性皆只發一條 SQL。
  • Load:訪問 ID 不發 SQL(Proxy 已知 ID),訪問其他屬性才發 SQL。

Get 方法 SQL Load 方法 SQL

程式化管理 API

  • Evict(obj):移除指定實例
  • Clear():清空快取
  • Contains(obj):檢查是否在快取

管理範例

var c1 = session.Get<Customer>(1);
var c2 = session.Get<Customer>(2);
Assert.IsTrue(session.Contains(c1));
session.Evict(c1);
Assert.IsFalse(session.Contains(c1));
session.Clear();
Assert.IsFalse(session.Contains(c2));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved