Ehcache

简介

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

主要特性

  1. 快速
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现

集成

可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

ehcache 和 redis 比较

ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,

处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

使用

引入依赖

   <dependency>

       <groupId>net.sf.ehcache</groupId>

       <artifactId>ehcache</artifactId>

       <version>2.10.2</version>

   </dependency>

在src/main/resources/创建一个配置文件 ehcache.xml

默认情况下Ehcache会自动加载classpath根目录下名为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

          maxEntriesLocalHeap="10000"

          eternal="false"

          timeToIdleSeconds="120"

          timeToLiveSeconds="120"

          maxEntriesLocalDisk="10000000"

          diskExpiryThreadIntervalSeconds="120"

          memoryStoreEvictionPolicy="LRU">

 <persistence strategy="localTempSwap"/>

</defaultCache>

<!-- helloworld缓存 -->

<cache name="HelloWorldCache"

         maxElementsInMemory="1000"

         eternal="false"

         timeToIdleSeconds="5"

         timeToLiveSeconds="5"

         overflowToDisk="false"

         memoryStoreEvictionPolicy="LRU"/>

</ehcache>

ehcache.xml 文件配置详解

 

diskStore

为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。

 

defaultCache

默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。

name

缓存名称

maxElementsInMemory

缓存最大数目

maxElementsOnDisk

硬盘最大缓存个数

eternal

对象是否永久有效,一但设置了,timeout将不起作用。

overflowToDisk

是否保存到磁盘,当系统当机时

timeToIdleSeconds

设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

timeToLiveSeconds

设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。

diskPersistent

是否缓存虚拟机重启期数据

DiskStore

(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

diskExpiryThreadIntervalSeconds

磁盘失效线程运行时间间隔,默认是120秒

memoryStoreEvictionPolicy

当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。

clearOnFlush

内存数量最大时是否清除

memoryStoreEvictionPolicy

可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。

FIFO,first in first out,先进先出。 
LFU, Less Frequently Used,一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 
LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

Springboot整合ehcache

1、  创建springboot项目

2、  引入依赖

<!--开启 cache 缓存-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId>
      </dependency>
      <!-- ehcache 缓存 -->
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
      </dependency>

3、  引入配置文件 ehcache.xml
在resource文件夹下创建文件ehcache.xml,并进行配置

如果在其他文件夹下的话则在properties中指定ehcache.xm文件的位置

        spring.cache.ehcache.config= #  ehcache配置文件地址

4、  Sevice层注解

@Cacheable : Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。 

@CacheEvict : 清除缓存。

@CachePut : @CachePut也可以声明一个方法支持缓存功能。使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。 

这三个方法中都有两个主要的属性:value 指的是 ehcache.xml 中的缓存策略空间;key 指的是缓存的标识,同时可以用 # 来引用参数。

简介

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

主要特性

  1. 快速
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现

集成

可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

ehcache 和 redis 比较

ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,

处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

使用

引入依赖

   <dependency>

       <groupId>net.sf.ehcache</groupId>

       <artifactId>ehcache</artifactId>

       <version>2.10.2</version>

   </dependency>

在src/main/resources/创建一个配置文件 ehcache.xml

默认情况下Ehcache会自动加载classpath根目录下名为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

          maxEntriesLocalHeap="10000"

          eternal="false"

          timeToIdleSeconds="120"

          timeToLiveSeconds="120"

          maxEntriesLocalDisk="10000000"

          diskExpiryThreadIntervalSeconds="120"

          memoryStoreEvictionPolicy="LRU">

 <persistence strategy="localTempSwap"/>

</defaultCache>

<!-- helloworld缓存 -->

<cache name="HelloWorldCache"

         maxElementsInMemory="1000"

         eternal="false"

         timeToIdleSeconds="5"

         timeToLiveSeconds="5"

         overflowToDisk="false"

         memoryStoreEvictionPolicy="LRU"/>

</ehcache>

ehcache.xml 文件配置详解

 

diskStore

为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。

 

defaultCache

默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。

name

缓存名称

maxElementsInMemory

缓存最大数目

maxElementsOnDisk

硬盘最大缓存个数

eternal

对象是否永久有效,一但设置了,timeout将不起作用。

overflowToDisk

是否保存到磁盘,当系统当机时

timeToIdleSeconds

设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

timeToLiveSeconds

设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。

diskPersistent

是否缓存虚拟机重启期数据

DiskStore

(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

diskExpiryThreadIntervalSeconds

磁盘失效线程运行时间间隔,默认是120秒

memoryStoreEvictionPolicy

当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。

clearOnFlush

内存数量最大时是否清除

memoryStoreEvictionPolicy

可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。

FIFO,first in first out,先进先出。 
LFU, Less Frequently Used,一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 
LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

Springboot整合ehcache

1、  创建springboot项目

2、  引入依赖

<!--开启 cache 缓存-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId>
      </dependency>
      <!-- ehcache 缓存 -->
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
      </dependency>

3、  引入配置文件 ehcache.xml
在resource文件夹下创建文件ehcache.xml,并进行配置

如果在其他文件夹下的话则在properties中指定ehcache.xm文件的位置

        spring.cache.ehcache.config= #  ehcache配置文件地址

4、  Sevice层注解

@Cacheable : Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。 

@CacheEvict : 清除缓存。

@CachePut : @CachePut也可以声明一个方法支持缓存功能。使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。 

这三个方法中都有两个主要的属性:value 指的是 ehcache.xml 中的缓存策略空间;key 指的是缓存的标识,同时可以用 # 来引用参数。

简介

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

主要特性

  1. 快速
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现

集成

可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

ehcache 和 redis 比较

ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,

处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

使用

引入依赖

   <dependency>

       <groupId>net.sf.ehcache</groupId>

       <artifactId>ehcache</artifactId>

       <version>2.10.2</version>

   </dependency>

在src/main/resources/创建一个配置文件 ehcache.xml

默认情况下Ehcache会自动加载classpath根目录下名为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

          maxEntriesLocalHeap="10000"

          eternal="false"

          timeToIdleSeconds="120"

          timeToLiveSeconds="120"

          maxEntriesLocalDisk="10000000"

          diskExpiryThreadIntervalSeconds="120"

          memoryStoreEvictionPolicy="LRU">

 <persistence strategy="localTempSwap"/>

</defaultCache>

<!-- helloworld缓存 -->

<cache name="HelloWorldCache"

         maxElementsInMemory="1000"

         eternal="false"

         timeToIdleSeconds="5"

         timeToLiveSeconds="5"

         overflowToDisk="false"

         memoryStoreEvictionPolicy="LRU"/>

</ehcache>

ehcache.xml 文件配置详解

 

diskStore

为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。

 

defaultCache

默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。

name

缓存名称

maxElementsInMemory

缓存最大数目

maxElementsOnDisk

硬盘最大缓存个数

eternal

对象是否永久有效,一但设置了,timeout将不起作用。

overflowToDisk

是否保存到磁盘,当系统当机时

timeToIdleSeconds

设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

timeToLiveSeconds

设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。

diskPersistent

是否缓存虚拟机重启期数据

DiskStore

(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

diskExpiryThreadIntervalSeconds

磁盘失效线程运行时间间隔,默认是120秒

memoryStoreEvictionPolicy

当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。

clearOnFlush

内存数量最大时是否清除

memoryStoreEvictionPolicy

可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。

FIFO,first in first out,先进先出。 
LFU, Less Frequently Used,一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 
LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

Springboot整合ehcache

1、  创建springboot项目

2、  引入依赖

<!--开启 cache 缓存-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId>
      </dependency>
      <!-- ehcache 缓存 -->
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
      </dependency>

3、  引入配置文件 ehcache.xml
在resource文件夹下创建文件ehcache.xml,并进行配置

如果在其他文件夹下的话则在properties中指定ehcache.xm文件的位置

        spring.cache.ehcache.config= #  ehcache配置文件地址

4、  Sevice层注解

@Cacheable : Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。 

@CacheEvict : 清除缓存。

@CachePut : @CachePut也可以声明一个方法支持缓存功能。使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。 

这三个方法中都有两个主要的属性:value 指的是 ehcache.xml 中的缓存策略空间;key 指的是缓存的标识,同时可以用 # 来引用参数。

 

 

 

posted @ 2022-03-29 09:32  过氧化氢  阅读(271)  评论(0编辑  收藏  举报