髒檢查
session到底是如何進行髒檢查的呢?當乙個customer物件被加入到session快取中時,session會為customer物件的值型別的屬性複製乙份快照。當session清理快取時,會先進行髒檢查,即比較customer物件的當前屬性與它的快照,來判斷customer物件的屬性是否發生了變化,如果發生了變化,就稱這個物件是「髒物件」,session會根據髒物件的最新屬性來執行相關的sql語句,從而同步更新資料庫。
快取清理機制
當session快取中物件的屬性每次發生了變化,session並不會立即清理快取和執行相關的sql update語句,而是在特定的時間點才清理快取,這使得session能夠把幾條相關的sql語句合併為一條sql語句,一遍減少訪問資料庫的次數,從而提高應用程式的資料訪問效能。
在預設情況下,session會在以下時間點清理快取。
當應用程式呼叫org.hibernate.transaction的commit()方法的時候.commit方法先清理快取,然後再向資料庫提交事務。hibernate之所以把清理快取的時間點安排在事務快結束時,一方面是因為可以減少訪問資料庫的頻率,還有一方面是因為可以盡可能縮短當前事務對資料庫中相關資源的鎖定時間。
當應用程式執行一些查詢操作時,如果快取中持久化物件的屬性已經發生了變化,就會清理快取,使得session快取與資料庫已經進行了同步,從而保證查詢結果返回的是正確的資料。
當應用程式顯示呼叫session的flush()方法的時候。
hibernate的三種狀態和快取
hibernate的三種狀態 1.瞬時態 物件裡面沒有id值,物件與session沒有關聯 類似,把class類new出來,不存進session 2.持久態 物件裡面有id值,物件與session關聯 類似,資料庫取出資料,設定id值 3.託管態 物件有id值,物件不與session關聯 建立乙個c...
查詢和快取
經過大量的測試,查詢和快取之間的關係已經基本上清楚了。1.一次查詢過後,結果集中的所有個體都會進入持久化上下文,也就是一級快取中 如果開啟了二級快取,它們也同樣會進入二級快取 這就是意味著後面的程式如果要load 不是查詢 結果集中的任何乙個物件都會從快取中直接命中,不會生成任何sql去hit資料庫...
快取和緩衝
1,緩衝 buffer 緩衝的作用就是協調上下層應用之間的效能差異 上下層的效能差異會導致資料的不協調,需要加乙個緩衝區,通過緩衝區的緩衝,當上層元件效能優於下層元件的時候,緩衝可以有效減少上層元件對下層元件等待的組織基於這樣的結構,上層元件就不需要等待下層元件完全接收全部資料,即可返回進行其他操作...