Spring Data Jpa缓存介绍

Posted 彩虹天堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Data Jpa缓存介绍相关的知识,希望对你有一定的参考价值。

一级缓存:

会话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缓存介绍的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA想要学得好,缓存机制掌握好

Spring Data JPA想要学得好,缓存机制掌握好

Spring Data JPA整合Redis缓存的配置

如何在 Spring Data JPA CRUDRepository 中添加缓存功能

微服务 第六章 springboot 通过Spring-data-jpa 配置Oracle数据源(Spring-data-jpa详细介绍)

如何在不使用查询缓存的情况下缓存 Spring Data JPA 查询方法的结果?