通常咱們本身作一個簡單對象緩存機制的話,我確定會用一個Map,map中保存的key使用類名+id的形式。hibernate提供的二級緩存的實現內部爲HashtableCacheProvider,可是在生產環節最好不要用它。緩存
hibernate中對緩存的封裝很是嚴實,其提供的緩存分爲兩級:安全
一級緩存:服務器
基於session級的緩存,save,updata,saveorUpdata,load,get,list等操做後的對象都會放入一級緩存,可是session以及緩存存在弊端,由於當咱們用戶提交一個請求時,服務器會爲該請求分發一個線程,並把事務操做綁定到當前線程上面,當咱們的操做完畢事務關閉後,session的一級緩存也會跟着消失,一個session一個緩存,這樣就致使一級緩存不長久,不能共享。再者,一級緩存中沒有使用任何的保護,咱們能夠一直往裏面添加數據,一直到內存的溢出,咱們不能控制緩存的數量,假如咱們一個勁的使用一級緩存,那麼爲了保證安全,咱們應該及時的清理一級緩存。session
二級緩存:框架
基於sessionFactory級別的緩存,二級緩存有不少框架能夠實現,要作一個嚴謹的緩存有必定的難度,hibernate應用中通常把二級緩存的管理交給第三方的框架來處理,可是hibernate也提供了二級緩存的實現,可是它內部爲HashtableCacheProvider來實現的,下面簡單的介紹一下二級緩存的簡單配置。ide
首先開啓二級緩存,明確用哪一個框架來實現,咱們這裏用osCacheProvider。hibernate
hibernate.cache.use_second_level_cache = true
hibernate.cache.provider_class = org.hibernate.cache.OSCacheProvider
hibernate.generate_statistics = true線程
<class-cache class="類的全名" usage="read-only"/>對象
還能夠在映射文件中寫入事務
<cache usage="read-only"/>