Hibernate的二級緩存

    思路:(1)什麼是緩存(2)hibernate的session是一級緩存,但有了一級緩存爲什麼還要有二級緩存呢?(3)如何配置Hibernate的二級緩存。

    (1)緩存就是把以前從數據庫中查詢出來和使用過的對象保存在內存中(一個數據結構),這個數據結構通常是或類似HashMap,當以後要使用某個對象時,先查詢緩存中是否有這個對象,如果有則使用緩存中的對象,如果沒有則去查詢數據庫,並將查詢出來的對象保存在緩存中,以便下次使用。下面是緩存的僞代碼:

Dao{
    HashMap map = new Map();
    User getUser(Integer id){
        User user = map.get(id);
        if(user == null){
            user = session.get(id);
            map.put(id,user);
        }
        return user;
    }
}
Dao{
    Cache cache = null;
    setCache(Cache cache){
        this.cache = cache;
    }
    
    User getUser(int id){
        if(cache != null){
            User user = cache.get(id);
            if(user == null){
                user = session.get(id);
                cache.put(id,user);
            }
            return user;
        }
        return session.get(id);
    }
}

    (2)Hibernate的Session就是一種緩存,我們通常將之稱爲Hibernate的一級緩存,當想使用session從數據庫中查詢出一個對象時,session也是先從自己內部查看是否存在這個對象,存在則直接返回,不存在自己內部。由於session代表一次回話過程,一個session與一個數據庫連接相關聯,所以session最好不要長時間保持打開,通常僅用於一個事務當中,在事務結束時關閉。並且session是不安全的,被多線程共享容易出現問題。通常只有那種全局意義上的緩存纔是真正的緩存應用,纔有較大的緩存價值,因此,Hibernate的session這一級緩存作用並不明顯,應用價值不大。Hibernate的二級緩存就是要爲Hibernate配置一種全局緩存,讓多個線程和多個事務都可以共享這個緩存。

    (3)二級緩存是獨立於hibernate的軟件部件,屬於第三方的產品,多個廠商和組織都提供有緩存產品,例如,EHCache和OSCache等等。在hibernate中使用二級緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個廠家的緩存產品,接着需要配置該緩存產品的自己的配置文件,最後要配置hibernate中的那些實體對象要納入到二級緩存的管理中。

    擴展知識:一個sessionfactory可以關聯一個二級緩存,也即一個二級緩存只能負責緩存一個數據庫中的數據,當使用hibernate的二級緩存後,注意不要有其他的應用或sessionfactory來更改當前數據庫中的數據,這樣緩存的數據就會與數據庫中的實際數據不一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章