Hibernate二級快取併發說明
二級快取的策略
當多個併發的事務同時訪問持久化層的快取中的相同資料時,會引起併發問題,必須採用必要的事務隔離措施。
在程序範圍或叢集範圍的快取,即第二級快取,會出現併發問題。因此可以設定以下4種類型的併發訪問策略,每一種策略對應一種事務隔離級別。
● 只讀快取(read-only)
如果應用程式需要讀取一個持久化類的例項,但是並不打算修改它們,可以使用read-only快取。這是最簡單,也是實用性最好的策略。
對於從來不會修改的資料,如參考資料,可以使用這種併發訪問策略。
● 讀/寫快取(read-write)
如果應用程式需要更新資料,可能read-write快取比較合適。如果需要序列化事務隔離級別,那麼就不能使用這種快取策略。
對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀這類的併發問題。
● 不嚴格的讀/寫快取(nonstrict-read-write)
如果程式偶爾需要更新資料(也就是說,出現兩個事務同時更新同一個條目的現象很不常見),也不需要十分嚴格的事務隔離,可能適用nonstrict-read-write快取。
對於極少被修改,並且允許偶爾髒讀的資料,可以採用這種併發訪問策略。
● 事務快取(transactional)
transactional快取策略提供了對全事務的快取,僅僅在受管理環境中使用。它提供了Repeatable Read事務隔離級別。對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀和不可重複讀這類的併發問題。
在上面所介紹的隔離級別中,事務型併發訪問策略的隔離級別最高,然後依次是讀/寫型和不嚴格讀寫型,只讀型的隔離級別最低。事務的隔離級別越高,併發效能越低。
什麼樣的資料適合存放到第二級快取中?
1) 很少被修改的資料
2) 不是很重要的資料,允許出現偶爾併發的資料
3) 不會被併發訪問的資料
4) 常量資料
不適合存放到第二級快取的資料?
1) 經常被修改的資料
2) 絕對不允許出現併發訪問的資料,如財務資料,絕對不允許出現併發
3) 與其他應用共享的資料。