1. 程式人生 > >Spring Data Jpa緩存介紹

Spring Data Jpa緩存介紹

級別 instance osc vid group 進程 config 詳細配置 oca

一級緩存:

會話session、事務級別的,事務退出,緩存就失效了。以id為標識

實體管理器-數據源 操作數據拷貝而非數據源。

二級緩存:

線程級或集群級,以id為標識放到緩存(針對id)

過程:一級緩存、二級緩存(進程級、可配置和修改)-數據源

多個線程訪問二級緩存,需要采取事務控制

橋接第三方緩存,hibernate二級緩存的實現:

1.ehcache

2.OScache

3.JBossCache

4.Memcached

......

什麽樣的數據適合二級緩存呢?

1.很少被修改的數據

2.不是很重要,允許偶爾出現並發的數據

3.不會被高並發訪問的數據

4.參數數據,通常是數量有限,極少被修改,大量的被其它實例引用的

不適合使用二級緩存?

1.經常被修改的數據,代價太大,得不償失

2.金錢敏感的數據,絕對不允許出現並發

3.與其他應用共享的數據

查詢緩存:

批量的緩存、批量的獲取,如按查詢條件、查詢結果進行緩存;

JPA+Ehcache緩存配置:

1.加入Ehcache依賴

<!--Ehcache-core 包 -->
<dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache-core</artifactId>
      <
version>2.6.9</version> </dependency> <!--添加Hibernate-Ehcache包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>${hibernate-version}</version> </dependency>

2.配置ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

    <diskStore path="java.io.tmpdir/ehcache"/>

    <!-- 默認緩存 -->
    <defaultCache
            maxElementsInMemory="1000"  <!-- 默認緩存中存最多數據項目 -->
            eternal="false" <!--是否永不過期-->
            timeToIdleSeconds="120" <!--空閑多長時間後從緩存中刪除-->
            timeToLiveSeconds="120" <!--活躍多長時間後從緩存中刪除-->
            overflowToDisk="false"/><!--超過maxElementsInMemory之後是否存儲到硬盤-->

    <!-- 題目緩存-->
    <cache name="questionCache"
           maxElementsInMemory="1000"
           eternal="true"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           overflowToDisk="false"
           memoryStoreEvictionPolicy="LRU" <!--數據項失效策略-->
   />
</ehcache>

3.persistence.xml配置加入緩存配置

<prop key="hibernate.cache.use_query_cache">true</prop> <!--開啟查詢緩存-->
<property name="hibernate.cache.use_second_level_cache">true</property><!--開啟二級緩存-->
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>  <!--ehcache支持-->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property><!--ehcache支持-->
<property name="hibernate.cache.provider_configuration">classpath:ehcache.xml</property><!--ehcache詳細配置-->

4.註解配置

未完待續...

Spring Data Jpa緩存介紹