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

Hibernate 快取機制入門:一級快取、二級快取配置與實戰驗證

     編輯:Java 綜合教學

Hibernate 快取機制入門:一級快取、二級快取配置與實戰驗證

一、快取基本概念

  • 位於應用程式與資料庫之間的記憶體緩衝區
  • 降低資料庫存取頻率,提升讀取效能
  • 快取資料為資料庫資料的拷貝

二、一級快取(Session 級)

特性

  • 內建、不可關閉、生命週期綁定 Session
  • Key 為實體 OID(主鍵),Value 為實體物件
  • 支援方法:get(), load(), save(), update(), saveOrUpdate()

驗證實驗


// 同一 Session 兩次 get
Session s = sessionFactory.openSession();
Grade g1 = (Grade) s.get(Grade.class, 14);
Grade g2 = (Grade) s.get(Grade.class, 14); // 僅執行 1 條 SQL
s.close();

// 不同 Session
Session s1 = sessionFactory.openSession();
Grade g3 = (Grade) s1.get(Grade.class, 14);
s1.close();
Session s2 = sessionFactory.openSession();
Grade g4 = (Grade) s2.get(Grade.class, 14); // 執行 2 條 SQL

三、二級快取(SessionFactory 級)

啟用步驟

  1. 引入依賴:ehcache, hibernate-ehcache, slf4j
  2. hibernate.cfg.xml 配置:

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
  1. 實體類或映射檔宣告快取策略:

// 註解方式
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Grade { ... }

// 或 hbm.xml
<class name="Grade" table="grade">
  <cache usage="read-write"/>
  ...
</class>
  1. 集合快取需額外宣告:

@OneToMany
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Set students;

EhCache 配置


<ehcache>
  <defaultCache maxEntriesLocalHeap="10000" eternal="false" 
                timeToIdleSeconds="120" timeToLiveSeconds="120" />
  <cache name="com.entity.Grade" maxEntriesLocalHeap="5000" />
</ehcache>

四、快取一致性注意事項

  • 二級快取不適用於頻繁寫入的實體
  • 集群環境需分散式快取(Redis、Hazelcast)替代 EhCache
  • HQL/JPQL 查詢預設不走二級快取,需啟用查詢快取

五、查詢快取


Query query = session.createQuery("from Grade");
query.setCacheable(true); // 需在 cfg 開啟 hibernate.cache.use_query_cache

合理使用快取可大幅降低資料庫壓力,但需權衡一致性與記憶體佔用。

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