1. 程式人生 > >hibernate的二級快取

hibernate的二級快取

1、 為什麼需要快取 拉高程式的效能 關係型資料庫:資料與資料之間存在關係(聯絡)的資料庫 mysql/Oracle、sqlserver 非關係型資料庫:資料與資料之間是不存在關係的,key-value (1)、基於檔案儲存的資料庫:ehcache (2)、基於記憶體儲存的資料庫:redis、memcache (3)、基於文件儲存的資料庫:mongodb

2、 什麼樣的資料需要快取 很少被修改或根本不改的資料 資料字典 業務場景比如:耗時較高的統計分析sql、電話賬單查詢sql等

3、 ehcache是什麼 Ehcache 是現在最流行的純Java開源快取框架,配置簡單、結構清晰、功能強大 注1:本章介紹的是2.X版本,3.x的版本和2.x的版本API差異比較大

4、ehcache的特點 (1)夠快 Ehcache的發行有一段時長了,經過幾年的努力和不計其數的效能測試,Ehcache終被設計於large, high concurrency systems. (2) 夠簡單 開發者提供的介面非常簡單明瞭,從Ehcache的搭建到運用執行僅僅需要的是你寶貴的幾分鐘。其實很多開發者都不知道自己用在用Ehcache,Ehcache被廣泛的運用於其他的開源專案

(3)夠袖珍 關於這點的特性,官方給了一個很可愛的名字small foot print ,一般Ehcache的釋出版本不會到2M,V 2.2.3 才 668KB。 (4)夠輕量 核心程式僅僅依賴slf4j這一個包,沒有之一!

(5)好擴充套件 Ehcache提供了對大資料的記憶體和硬碟的儲存,最近版本允許多例項、儲存物件高靈活性、提供LRU、LFU、FIFO淘汰演算法,基礎屬性支援熱配置、支援的外掛多 (6)監聽器 快取管理器監聽器 (CacheManagerListener)和 快取監聽器(CacheEvenListener),做一些統計或資料一致性廣播挺好用的 (7)分散式快取 從Ehcache 1.2開始,支援高效能的分散式快取,兼具靈活性和擴充套件性

3、ehcache的使用 (1)匯入相關依賴

 <dependency>
      	<groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.10.0</version>
 </dependency>

(2)核心介面 CacheManager:快取管理器 Cache:快取物件,快取管理器內可以放置若干cache,存放資料的實質,所有cache都實現了Ehcache介面 Element:單條快取資料的組成單位

(3)src:ehcache.xml

4、hibernate快取 (1) 一級快取 session

(2)二級快取 SessionFactory 可拔插式

5、hibernate(5.2.12.Final)中使用二級快取步驟(ehcache) (1)匯入ehcache相關依賴

  <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-ehcache</artifactId>
        <version>5.2.12.Final</version>
 </dependency>

(2)src新增ehcache.xml

(3)hibernate.cfg.xml中新增二級快取相關配置

   <!-- 開啟二級快取 -->
      <property name="hibernate.cache.use_second_level_cache">true</property>
      <!-- 開啟查詢快取 -->
      <property name="hibernate.cache.use_query_cache">true</property>
      <!-- EhCache驅動 -->
      <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

(4)指定實體類開啟二級快取

  <!-- xml配置方式 -->
  <class table="t_sys_dict" name="entity.Dict">
	<cache usage="read-write"/> 
            .......
  </class>


 注1:查全部需要編寫程式碼來開啟二級快取的
 query.setCacheRegion("entity.Dict");//指定快取策略,名字必須實體類的完整類名
 query.setCacheable(true);//手動開啟二級快取

6、log4j2 非同步

7、slf4j 抽象的日誌系統 slf4j log4j2/common logging

小結思路: 快取原理 ehcache.xml介紹 util肖demo slf4j介紹 hibernate整合ehcache查單個 查所有