1. 程式人生 > >Hibernate資料快取策略筆記02

Hibernate資料快取策略筆記02

  持久層設計中,往往需要考慮到幾個不同層次中的資料快取策略。這些層次的劃分標準針對不同的情況有所差異,一般而言,orm的資料快取應包含如下幾個層次:

1.事務級快取(Transaction Layer Cache)

2.應用級/程序級快取(Application/Process Layer Cache)

3.分散式快取(Cluster Layer Cahce)

一、事務級快取

     在當前事務範圍內的資料快取策略。

    在這裡的事務可能是一個數據庫事務,也可能是某個應用級事務。對於Hibernate而言,

事務級快取是基於Session生命週期實現的,每個Session會在內部不維持一個數快取,

此快取隨著Session的建立(銷燬)而存在(消亡),因此也稱為Session Level Cache

(也稱為內部快取)

二、應用級快取

        在某個應用中,或者應用中某個獨立資料訪問子集中的共享快取。

        此快取可由多個事務(資料庫事務或者應用級事務)共享。事務之間的快取共享策略

與應用的事務隔離機制密切相關。在Hibernate中,應用級快取在SessionFactory

層實現,所有由此SessionFactory建立的Session例項共享此快取,因此也稱為Seesion

Factory Level Cache。

        多例項併發執行的環境(如多機負載均衡環境中)中,我們必須特別小心快取機制可能

帶來的負面效應。

       假設例項A和例項B共享同一資料庫,並行執行,A和B各自維持自己的快取,如果缺乏

同步機制,A在某個操作中對資料庫進行了更新,而B並沒有獲得相應的更新通知,其快取中的資料還是

資料庫修改之前的版本,那麼B在之後的讀取操作中,可能就以此過期資料作為資料來源,從而導致資料同步

錯誤,這樣的錯誤對於關鍵業務資料而言是無法承受的。

     在這種情況下,應用級快取無法使用。為了解決這個問題,我們引入了分散式快取。

三、分散式快取

在多個應用例項,多個jvm之間共享的快取模式。

分散式快取由多個應用級快取例項組成叢集,通過某種遠端機制(如RMI或JMS)

實現多個快取例項間的資料同步,任何一個例項的資料修改操作,將導致整個叢集間的資料狀態同步。