首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hibernate 一級/二級緩存啟用時機與配置

     編輯:程式設計綜合問答

直接回答

  • 一級緩存(Session 級):默認自動啟用,無需配置。生命周期與 Session 綁定,Session 關閉即失效。
  • 二級緩存(SessionFactory 級):默認關閉,需**手動開啟並配置緩存提供者**(Ehcache、Infinispan、Redis 等)。

一級緩存細節

  • 作用域:單個 Session(通常對應一次請求/事務)。
  • 自動緩存:load()、get()、save()、update()、HQL/ Criteria 查詢結果(實體)。
  • 不可共享:不同 Session 之間不共享一級緩存。
  • 強制同步:session.flush()、session.refresh(entity)、session.evict(entity)、session.clear()。

二級緩存啟用步驟

1. 添加依賴(以 Ehcache 為例)

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-ehcache</artifactId>
    <version>5.6.x</version>
</dependency>

2. 配置 hibernate.cfg.xml / persistence.xml

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!-- 可選:查詢緩存 -->
<property name="hibernate.cache.use_query_cache">true</property>

3. 實體類聲明緩存策略

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 或 NONSTRICT_READ_WRITE, READ_ONLY
public class User { ... }

4. 提供 ehcache.xml 配置過期/驅逐策略

<ehcache>
    <defaultCache eternal="false" maxElementsInMemory="1000"
                  timeToIdleSeconds="300" timeToLiveSeconds="600" />
    <cache name="com.entity.User" maxElementsInMemory="5000" />
</ehcache>

常見誤區

  • 以為配置了 SessionFactory 就自動有二級緩存 → **錯**,必須顯式開啟 use_second_level_cache 並指定 RegionFactory。
  • 以為一級緩存可跨請求共享 → **錯**,Session 關閉即銷毀。
  • 集合關聯未加 @Cache → 關聯集合不進二級緩存,仍發 SQL。

總結

一級緩存:開箱即用,Session 隔離。
二級緩存:需依賴、配置、註解三步走,SessionFactory 級共享。
生產環境建議按實體業務特性(讀多寫少用 READ_WRITE,極少變動用 READ_ONLY)精細配置策略與過期時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved