Hibeinate快取概念整理
阿新 • • 發佈:2018-11-15
1. 快取的範圍
- a. 事務範圍(一級快取)
- i. 只能被當前事務訪問
- ii. 生命週期依賴於事務生命週期
- iii. 快取介質是記憶體
- b. 程序範圍(二級快取)
- i. 程序範圍內所有事務共享 i. 程序範圍內所有事務共享
- ii. 依賴於程序生命週期i. 依賴於程序生命週期
- iii. 物理介質可以為記憶體或硬碟 iii. 物理介質可以為記憶體或硬碟
- c.叢集範圍(二級快取)
- i. 被一個或多個機器的程序共享
- ii. 程序間通過遠端通訊保證資料的一致性
2.Java物件在Hibernate持久化層中的狀態
- a. 臨時狀態 new
- b. 持久化狀態 save()、persist(Hibernate 3)
- c. 刪除狀態
- d. 遊離狀態
- i. update():把遊離物件加入Session快取 i. update():把遊離物件加入Session快取
- ii. merge():把遊離物件的屬性複製到持久化物件中ii. merge():把遊離物件的屬性複製到持久化物件中
- e. get()和load(),都只通過主鍵查詢
- i. Get()採用立即檢索策略,立即執行語句i. Get()採用立即檢索策略,立即執行語句
- 目的為了訪問物件的各個屬性
- 無返回結果時使用結果拋NullPointerException
- ii. Load()方法採用延遲檢索策略,不立即執行語句,
- 僅返回實體類的代理類例項,只儲存實體物件的id值,佔用記憶體少
- 使用到物件的其他屬性時,才執行查詢
3)目的是為了刪除或建立和別的物件的聯絡 - 無返回結果時使用結果拋ObjectNotFoundException
- i. Get()採用立即檢索策略,立即執行語句i. Get()採用立即檢索策略,立即執行語句
- f.saveOrUpdate()
- g. delete()
- h. close()
3. 一級快取
- a. Session快取
- b. 內建的
- c. 不能被卸除的
- d. 一般由Hibernate自動維護的
4. Session快取(一級快取)清理快取
- a. 快取中物件屬性發生變化時,Session不會立即清理快取執行語句,而是在特定的時間點才清理
- b. 這讓Session可以將幾條相關的sql語句合併為一條語句,減少訪問資料庫的次數
- c. 清理快取時間點
- i.呼叫Transection的commit()方法
- ii. 執行查詢操作時,持久化物件的屬性已發生變化,為保證資料一致性
- iii. 顯示呼叫Session的flush()方法
5. 二級快取(SessionFactory的快取)
6.查詢快取
- a. 支援條件查詢(一級二級都不支援)
- b. 依賴二級快取
- c. 特定條件下發揮作用
- i. 完全相同的HQL重複執行
- ii.重複執行期間,Query Cache對應的資料表不能有資料變動(新增、刪除、修改)
- iii. 絕大多數查詢並不能從查詢快取中受益,所以Hibernate預設不進行查詢快取。
7. 通過時間戳判斷查詢結果是否過期
- a. 第一刻,執行查詢語句,結果放入快取,記時間戳為t1
- b. 第二刻,對已查詢的相關表進行插入更新刪除操作,記時間戳為t2
- c.第三刻,執行查詢語句,對比QueryCache區域時間戳和時間戳快取區域,若t2>t1,則查詢快取失效